我能描述情况的最好方法就是展示一个例子:
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
}
}
为什么会发生这种情况,我怎样才能超越它?
答案 0 :(得分:1)
您需要在方法中添加mutating
关键字。否则struct中的方法默认为immutable,这意味着您无法修改方法中的self
。并将self
传递给另一个方法,隐含地使用inout
关键字表示您要修改它。
struct Two {
mutating func getOne() -> One {
var o = One()
o.setup(&self) // Two is not subtype of '@lvalue $T5'
return o
}
}