考虑以下示例。
struct AStruct{ var i = 0 } class AClass{ var i = 0 var a: A = A(i: 8) func aStruct() -> AStruct{ return a } }
如果我尝试更改类实例的变量,AClass则编译成功。
AClass
var ca = AClass() ca.a.i = 7
但是,如果我尝试更改aStructmethod 的返回值,则编译会发出尖叫
aStruct
ca.aStruct().i = 8 //Compile error. Cannot assign to property: function call returns immutable value.
有人可以解释一下。
这是编译器告诉您的修改struct无用的方式。
struct
这是发生了什么:当你打电话aStruct(),一个 副本 的A回传给你。该副本是 临时的 。您可以检查其字段,或将其分配给变量(在这种情况下,您将能够重新访问您的修改)。如果编译器允许您对该临时结构进行修改,则将无法访问它们。这就是为什么编译器确定这是编程错误的原因。
aStruct()
A