考虑这个例子
class Foo {
private let bar = "bar"
lazy var baz : String = {
return "baz (bar)"
}()
}
不幸的是,这不会编译并给出以下错误
'Foo.Type' does not have a member named 'bar'
我真的不想在类之外(全局)声明bar
。没有其他方法可以将其保存在类中吗?为什么bar
一开始就不可访问?
TL;DR:self
序言
Swift的错误消息可能会引起很大的误导,但在这种情况下,可以从消息中推断出答案。它在类型Foo.type上查找bar
,而您正试图引用一个实例变量。以下是有效的代码:
class Foo {
private let bar = "bar"
lazy var baz : String = {
return "baz (self.bar)"
}()
}
在懒惰道具中,你需要说self-
lazy var baz : String = {
let bar = self.bar
return "baz (bar)"
}()