Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift语法:在setter中访问的数组元素的索引?_Arrays_Swift_Setter_Subscript - Fatal编程技术网

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

Arrays Swift语法:在setter中访问的数组元素的索引?,arrays,swift,setter,subscript,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中,如何获取已设置元素的索引?您无法直接访问已更改元素的索引,

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

var bar: [String] = [] {
    didSet {
        println("Set to \(bar)")
    }
}
设置一些元素可以让我们:

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

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

您无法直接访问已更改元素的索引,部分原因是在特定索引处设置新值只是触发
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 []
bar=[“你好”,“世界”]//设置为[你好,世界]
条形图[0]=“你好”//设置为[你好,世界]
插入(“残忍”,atIndex:1)//设置为[你好,残忍,世界]

bar.replaceRange(0..Ok…这很有意义。因此,可能问题是:如果要重写数组的subscript()方法,那会是什么样子?我当时对语法一无所知…问题是,
array
是一个结构,所以不能子类化和重写subscript。(这是Objective-C的坚定支持者开始咬牙切齿的地方。)您需要创建一个全新的类型,将
数组作为属性,并在其下标和get/set方法中使用所需的逻辑。您的用例是什么?这是一个您将要创建和使用的数组,还是您试图从其他地方监视数组中的更改?是后者--数组是一个属性,而我想知道它什么时候会改变。(是的,有其他的方法来实现该功能,但我想知道是否有一些聪明的方法可以用这种时髦的新语言来实现!)我想知道是否有可能实现对
数组的扩展?