为什么在swift值中的不可变数组可以改变?

-1 swift

在swift中,不可变数组中的值可以更改,但不可变字典中的值不能更改为什么?

let imArray = ["Ram","Shyam","Bharat"] 
imArray[2] = "Abhimanyu" // this change will be apply though it is immutable 
Run Code Online (Sandbox Code Playgroud)

Jac*_*ack 5

编辑:在Xcode 6 beta 3笔记中,现在已经改变了.他们现在表现得一样.

Swift中的数组已经完全重新设计,具有完全值语义,如Dictionary和String在Swift中一直有.这解决了各种可变性问题 - 现在'let'数组是完全不可变的,'var'数组是完全可变的 - 用Dictionary和String正确组合,并解决其他更深层次的问题.如果您习惯使用NSArray或C数组,则值语义可能会令人惊讶:数组的副本现在使用高效的惰性副本实现生成所有元素的完整且独立的副本.这是Array的一个重大变化,仍有一些性能问题需要解决.有关更多信息,请参阅Swift编程语言.(17192555)


我在WWDC上与一位Apple工程师讨论了这个问题

对于数组,当你把它定义为一个常数,这意味着衬里缓冲器是恒定的,并且因此可以改变缓冲器的内容,但不能掉出缓冲器或修改其长度.

对于词典,它完全是不可变的.

当然,如果您认为它的行为应该不同,请向他们提交一张票!