NSMutableArray 如何在 swift 中使用 let 添加对象

How can NSMutableArray add object using let in swift

我使用 let 在 swift 中创建了一个 NSMutableArray 并且 当我在 mutableArray 中添加 addObject 时,它会添加它,即使我 使用 let 分配一个常量。谁能解释一下 let 在 swift 中是如何工作的?如果它不允许您在以后增加价值,那么以下内容如何 代码有效?

let arr : NSMutableArray = [1,2,3,4,5]
arr.addObject(6)
println(arr)

免责声明:此回答仅适用于NS类型数据结构,完整图片请看@Eric D的回答

let 与 class 一起使用时仅表示变量不能更改,例如,更改为另一个数组。如果您不希望数组可编辑,请使用普通的 NSArray 而不是可变的

let arr : NSMutableArray = [1,2,3,4,5]
arr = [1,2,3,4,5] //error trying to assign to a let variable that has already been assigned

arr.addObject(6) //fine because we are not changing what is assigned to arr, but we are allowed to change the object that is assigned to arr itself

我觉得你对常量变量的理解有点太严格了。

类 是 引用类型 ,而 NSMutableArray 是 class。

Foundation 的 NSMutableArray 与 Swift 的 Array 不同:后者是 值类型.

如果创建常量 NSMutableArray:

let ns: NSMutableArray = ["a", "b"]

然后这有效:

ns.addObject("c")

但这不是:

ns = ["d", "e"]   // nope!

因为您可以更改引用的内容,但不能更改分配给常量的内容。

另一方面,Swift的数组:

let sw: [String] = ["a", "b"]

无法更改常量,因为它是一个值,而不是引用。

sw.append("c")   // nope!

文档:Structures and Enumerations Are Value Types and Classes Are Reference Types