如何在Swift中创建不可变数组?
对文档的肤浅解读表明你可以做到
let myArray = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,这实际上产生了一个可变的,固定大小的数组.这种可变性创建了常见的谜题,其中包含未预料到的别名和函数,这些谜题会改变其参数:
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]
Run Code Online (Sandbox Code Playgroud)
没比C好多少
如果我想要不变性,那么最好将它包装NSArray成如此:
let immutableArray = NSArray(myArray: [1,2,3])
Run Code Online (Sandbox Code Playgroud)
这看起来很疯狂.我在这里错过了什么?
更新时间(2015-07-26):
这个问题可以追溯到斯威夫特的早期阶段.从那时起,Swift已经更新,因此不可变数组实际上是不可变的,如下面的答案所示.