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
未解析?
我在这里做错了什么?
答案 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作为可选项,但这取决于你。