Изменить начальное значение массива Swift - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь изменить начальное значение массива, но я не уверен, как это сделать.

Пример:

var players = ["Peter", "John", "Michael"]
var rules = ["\(players.randomElement()!) has to run", "\(players.randomElement()!) is the best"]

players.removeAll()
players.append("Gina", "Martin")
print(rules)

А потом я хочу напечатать Джину или Мартина.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Вам нужно сделать rules вычисляемым свойством, если вы хотите, чтобы оно выбирало новое player каждый раз, когда вы получаете доступ к rules.

var players = ["Peter", "John", "Michael"]
var rules: [String] {
    return ["\(players.randomElement()!) has to run", "\(players.randomElement()!) is the best"]
}

players.removeAll()
players.append("Gina", "Martin")
print(rules)

Или, если вы просто хотите автоматически обновить rules на основе нового players, если обновлено players, вы можете добавить наблюдателя свойства в players.

var rules = [String]()
var players = ["Peter", "John", "Michael"] {
    didSet {
        if players.count > 0 {
            rules = ["\(players.randomElement()!) has to run", "\(players.randomElement()!) is the best"]
        } else {
            rules = []
        }
    }
}

rules = ["\(players.randomElement()!) has to run", "\(players.randomElement()!) is the best"]
print(rules)
players.removeAll()
players.append(contentsOf: ["Gina", "Martin"])
print(rules)
0 голосов
/ 01 ноября 2018

Это потому, что правила не знают, что игроки изменили свои значения. вам нужно либо переустановить правила после смены игроков, либо распечатать игроков вместо правил

...