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

时间:2015-07-24 08:40:46

标签: ios swift nsmutablearray

我使用let和。在swift中创建了一个NSMutableArray 当我在mutableArray中添加addObject时,它会添加它,即使我 使用let分配常量。任何人都可以解释let如何在swift中工作吗?如果它不允许您稍后添加值,那么以下内容如何 代码工作?

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

2 个答案:

答案 0 :(得分:11)

类是引用类型,NSMutableArray是一个类。

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 TypesClasses Are Reference Types

答案 1 :(得分:9)

免责声明:此答案仅适用于NS类型数据结构,请参阅@Eric D的答案以获取完整图片

let与类一起使用时,意味着变量无法更改,例如,更改为另一个数组。如果您不希望阵列可编辑,请使用普通的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

我认为你对常量变量的理解有点过于严格。