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

abh*_*war 8 nsmutablearray ios swift

我在swift中创建了一个NSMutableArray,let当我在mutableArray中添加addObject时,它会添加它,即使我使用它let来分配一个常量.谁能解释一下如何let在swift中工作?如果它不允许您稍后添加值,那么以下代码如何工作?

let arr : NSMutableArray = [1,2,3,4,5]
arr.addObject(6)
println(arr)
Run Code Online (Sandbox Code Playgroud)

aya*_*aio 11

类是引用类型,NSMutableArray是类.

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

如果您创建一个常量NSMutableArray:

let ns: NSMutableArray = ["a", "b"]
Run Code Online (Sandbox Code Playgroud)

然后这工作:

ns.addObject("c")
Run Code Online (Sandbox Code Playgroud)

但这不是:

ns = ["d", "e"]   // nope!
Run Code Online (Sandbox Code Playgroud)

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

另一方面,使用Swift的数组:

let sw: [String] = ["a", "b"]
Run Code Online (Sandbox Code Playgroud)

常量不能改变,因为它是一个值,而不是一个引用.

sw.append("c")   // nope!
Run Code Online (Sandbox Code Playgroud)

Doc:结构和枚举是值类型类是引用类型


Fon*_*nix 9

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

let当与类一起使用时,意味着变量不能被改变,例如,改变到另一个数组.如果您不希望阵列可编辑,请使用普通的NSArray而不是可变的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
Run Code Online (Sandbox Code Playgroud)

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