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
,以提供通过引用传递的功能