【问题标题】:Why in immutable array in swift value can be changed?为什么可以更改 swift 值中的不可变数组中的值?
【发布时间】:2014-06-18 17:51:03
【问题描述】:

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

let imArray = ["Ram","Shyam","Bharat"] 
imArray[2] = "Abhimanyu" // this change will be apply though it is immutable 

【问题讨论】:

标签: swift


【解决方案1】:

编辑:在 Xcode 6 beta 3 注释中,现在已更改。它们现在的行为相同。

Swift 中的数组已经完全重新设计,具有完整的价值 像 Dictionary 和 String 这样的语义在 Swift 中一直存在。这 解决了各种可变性问题——现在一个'let'数组是 完全不可变,“var”数组是完全可变的—— 与 Dictionary 和 String 正确组合,并解决其他更深层次的问题 问题。如果您习惯于使用值语义,您可能会感到惊讶 NSArray 或 C 数组:数组的副本现在会生成完整且 使用有效的惰性副本对所有元素进行独立副本 执行。这是 Array 的一个重大变化,并且有 还有一些性能问题需要解决。请看斯威夫特 编程语言了解更多信息。 (17192555)


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

对于数组,当您将其定义为常量时,这意味着 后备缓冲区 是常量,因此您可以更改缓冲区的内容,但不能换出缓冲区或修改其长度.

对于字典,它是完全不可变的。

当然,如果您认为它的行为应该有所不同,请向他们提交工单!

【讨论】:

    【解决方案2】:

    来自Apple's Swift documentation,在集合的可变性下...

    然而,不变性对于数组的含义略有不同。您仍然不能执行任何可能更改不可变数组大小的操作,但您可以为数组中的现有索引设置新值。这使得 Swift 的 Array 类型能够在数组大小固定时为数组操作提供最佳性能。

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2010-10-01
      • 2020-05-17
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多