我得到let
用于常量,var
用于变量。但是,这段代码让我很困惑。
func filterGreaterThanValue(value: Int, numbers: [Int]) -> [Int] {
let result:[Int] = [Int]()
for number in numbers {
if number > value {
result.append(number)
}
}
return result
}
运行它会产生错误
error: MyPlayground.playground:5:13: error: cannot use mutating member on immutable value: 'result' is a 'let' constant
result.append(number)
^~~~~~
据我了解,使用let
关键字声明的对象是 immutable ,因为我可以更改其属性,但无法将指向该对象的变量重新分配给其他对象(即让它指向内存中的另一个地址)。
然而,在这个例子中,我做的是同样的事情吗?我初始化了一个数组对象,我只是修改它的属性。为什么我不允许这样做?
感谢。
答案 0 :(得分:1)
在Swift中Array
是struct
,它是值类型。要更改struct的属性,您需要同时创建对象和属性var
。