变换用let关键字声明的数组

时间:2018-03-29 05:18:53

标签: swift

我得到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 ,因为我可以更改其属性,但无法将指向该对象的变量重新分配给其他对象(即让它指向内存中的另一个地址)。

然而,在这个例子中,我做的是同样的事情吗?我初始化了一个数组对象,我只是修改它的属性。为什么我不允许这样做?

感谢。

1 个答案:

答案 0 :(得分:1)

在Swift中Arraystruct,它是值类型。要更改struct的属性,您需要同时创建对象和属性var