请考虑以下示例.
struct AStruct{
var i = 0
}
class AClass{
var i = 0
var a: A = A(i: 8)
func aStruct() -> AStruct{
return a
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试改变类实例的变量,AClass
它会成功编译.
var ca = AClass()
ca.a.i = 7
Run Code Online (Sandbox Code Playgroud)
但是如果我试图改变aStruct
方法的返回值,编译就会尖叫
ca.aStruct().i = 8 //Compile error. Cannot assign to property: function call returns immutable value.
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗.
das*_*ght 12
这是编译器告诉你修改的方法struct
是没用的.
这是发生了什么:当你打电话aStruct()
,一个副本的A
回传给你.这个副本是临时的.您可以检查其字段,或将其分配给变量(在这种情况下,您可以访问您的修改).如果编译器允许您对此临时结构进行修改,则无法访问它们.这就是编译器确定这是一个编程错误的原因.
尝试这个。
var aValue = ca.aStruct()
aValue.i = 9
Run Code Online (Sandbox Code Playgroud)
说明
aStruct()
实际上返回原始struct的副本a
。除非您为其指定一个常量,否则它将隐式地视为一个常量var
。
归档时间: |
|
查看次数: |
8475 次 |
最近记录: |