如何在Swift中创建一个不可变数组?你如何在Swift中创建一个不可变数组?
的文档的阅读浅表会建议你可以做
let myArray = [1,2,3]
但不幸的是这实际上会产生一个可变的,固定大小的数组。这种可变性创建了没有料到的混淆和功能变异及其参数通常拼图:
let outterArray = [myArray, myArray]
outterArray[0][0] = 2000
outterArray //=> [[2000,2,3],[2000,2,3]] surprise!
func notReallyPure(arr:Int[]) ->() { arr[0] = 3000 }
notReallyPure(myArray)
myArray // => [3000,2,3]
比C
如果我想更改的,是最好的选择也好不到哪去真正把它包起来在NSArray
像这样:
let immutableArray = NSArray(myArray: [1,2,3])
这似乎很疯狂。我在这里错过了什么?
更新(2015年7月26日):
从斯威夫特的最早期这个问题的日期。从那以后,Swift被更新了,因此不可变数组实际上是不可变的,如下面的答案所示。
不幸的是,我想你不会错过什么。恕我直言,这是Swift的一个不好的功能。 – Michael
我很确定使用一个元组将保证不变性,但我意识到失去了数组的好处 – Jiaaro
我希望比我理解的更聪明的人比这个更好。这看起来很疯狂。 – algal