Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 结构传递自身原因:@lvaue错误的自身子类型_Swift - Fatal编程技术网

Swift 结构传递自身原因:@lvaue错误的自身子类型

Swift 结构传递自身原因:@lvaue错误的自身子类型,swift,Swift,我能描述这种情况的最好方法就是举个例子: struct One { func setup(inout t:Two) { // inout is important to not copy the struct in } } struct Two { func getOne() -> One { var o = One() o.setup(&self) // Two is not subtype of '@lvalue $T5' ret

我能描述这种情况的最好方法就是举个例子:

struct One {
  func setup(inout t:Two) {
    // inout is important to not copy the struct in
  } 
}

struct Two {
  func getOne() -> One {
    var o = One()
    o.setup(&self) // Two is not subtype of '@lvalue $T5'
    return o
  }
}

为什么会发生这种情况?我如何克服它?

您需要在方法中添加
mutating
关键字。否则,struct中的方法默认为不可变,这意味着您不能修改方法中的
self
。并将
self
传递给另一个方法,该方法使用
inout
关键字隐式地表示要修改它

struct Two {
  mutating func getOne() -> One {
    var o = One()
    o.setup(&self) // Two is not subtype of '@lvalue $T5'
    return o
  }
}

请尝试将
变异
添加到
getOne
,否则您无法修改
自我
@JackWu我也会收到相同的错误,但这次在t.@BryanChen上,这一点很有效!我不知道为什么,因为我没有把两个人的自我变为一个人。用
变为
很好。这是有意义的,因为
inout
用于指定要更改参数。但是在这个用例中,至少有一个
结构
应该真正实现为
,而不是(本质上)“滥用”
inout
,以提供通过引用传递的功能