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

时间:2014-06-09 21:53:54

标签: 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'
    return o
  }
}

为什么会发生这种情况,我怎样才能超越它?

1 个答案:

答案 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
  }
}