为什么自己没有解决?

时间:2017-03-25 11:23:05

标签: swift class protocols self

protocol LOL {
    var foo: ((_ lol: String) -> Bool)? { get set }
}

class LMAO: LOL {
    internal var foo: ((String) -> Bool)? = { (_ lol: String) in
        self.rofl()
        return true
    }

    func rofl() {}
}

为什么内部self变量中的foo未解析?

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您分配给foo的闭包与您的LMAO类无关,因此它没有" self"。

如果要使用当前实例自身的代码初始化foo变量,则需要使用延迟初始化。您还需要以某种方式链接到当前实例(普通闭包不会这样做)。

最简单的方法可能是在您的类中添加defaultFoo函数并将其指定为初始值:

class LMAO: LOL 
{
  lazy var foo: ((String) -> Bool)? = self.defaultFoo

  func defaultFoo (_ lol: String) -> Bool
  {
    self.rofl()
    return true
  }

  func rofl() {}
}

此时你可能不需要foo作为可选项,但这取决于你。