【问题标题】:Change initial array value Swift更改初始数组值 Swift
【发布时间】:2018-11-01 16:16:19
【问题描述】:

我正在尝试更改初始数组值,但我不确定该怎么做。

例子:

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)

然后我希望它打印 Gina 或 Martin。

【问题讨论】:

  • 你当前的代码有什么问题?
  • 打印时,它不会打印 Gina 或 Martin。它打印旧值之一
  • 看起来您在附加名称之前设置了规则。尝试在追加后放置规则
  • 使用调试器并在代码的每一步之后查看所有变量。你也可以自己做这个练习,看看你所期望的和实际发生的之间的区别。您很快就会发现问题。
  • 问题是,我首先希望它显示来自玩家的初始值,然后我想将玩家更改为新值,然后打印新值。

标签: arrays swift


【解决方案1】:

这是因为规则不知道玩家改变了他们的价值观。您需要在更改球员后重新设置规则或打印球员而不是规则

【讨论】:

  • 如何重新设置规则?
  • 因为 rules 是一个 var 你可以做 rules = ["(players.randomElement()!) 必须运行", "(players.randomElement()!) 是最好的"]
  • 你也可以让规则成为一个计算属性,这样你就不需要在每次玩家更改时更新规则了这篇文章很有帮助:medium.com/@micosmin/swift-computed-properties-2a8fd9f88d6
【解决方案2】:

如果您希望每次访问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)

或者如果您只是想在players 更新的情况下基于新的players 自动刷新rules,您可以向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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2012-12-29
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多