一尘不染

无法分配给属性:函数调用返回不可变值

swift

考虑以下示例。

struct AStruct{
    var i = 0
}

class AClass{
    var i = 0
    var a: A = A(i: 8)

    func aStruct() -> AStruct{
        return a
    }
}

如果我尝试更改类实例的变量,AClass则编译成功。

var ca = AClass()
ca.a.i = 7

但是,如果我尝试更改aStructmethod 的返回值,则编译会发出尖叫

ca.aStruct().i = 8 //Compile error. Cannot assign to property: function call returns immutable value.

有人可以解释一下。


阅读 343

收藏
2020-07-07

共1个答案

一尘不染

这是编译器告诉您的修改struct无用的方式。

这是发生了什么:当你打电话aStruct(),一个 副本A回传给你。该副本是 临时的
。您可以检查其字段,或将其分配给变量(在这种情况下,您将能够重新访问您的修改)。如果编译器允许您对该临时结构进行修改,则将无法访问它们。这就是为什么编译器确定这是编程错误的原因。

2020-07-07