Swift语法:在setter中访问的数组元素的索引?

时间:2015-02-09 14:17:14

标签: arrays swift setter subscript

假设我有一个带有didSet的字符串数组:

var bar: [String] = [] {
    didSet {
        println("Set to \(bar)")
    }
}

设置一些元素给我们:

bar = ["Hello", "world"] // Set to [Hello, world]
bar[0] = "Howdy" // Set to [Howdy, world]

问题:在我的didSet中,如何获取已设置的元素的索引

1 个答案:

答案 0 :(得分:1)

您无法直接访问已更改元素的索引,部分原因是在特定索引处设置新值只是一个将触发didSet处理程序的操作。任何变异方法都会导致调用:

bar = ["Hello", "world"]                       // Set to [Hello, world]
bar[0] = "Howdy"                               // Set to [Howdy, world]
bar.insert("cruel", atIndex: 1)                // Set to [Howdy, cruel, world]
bar.replaceRange(0..<1, with: ["So", "long"])  // Set to [So, long, cruel, world]
bar.removeRange(2..<3)                         // Set to [So, long, world]
bar.append("!")                                // Set to [So, long, world, !]
bar.removeAll()                                // Set to []

didSet处理程序中,您可以访问名为oldValue的特殊变量,该变量包含观察变量的先前值。如果您需要更多内容,则需要实施structclass使用Array进行存储,但提供自己的真正访问方法。