考虑这个例子
class Foo {
private let bar = "bar"
lazy var baz : String = {
return "baz \(bar)"
}()
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这将无法编译并给出以下错误
'Foo.Type' does not have a member named 'bar'
Run Code Online (Sandbox Code Playgroud)
我真的不想bar在课外宣布(全球).是否没有其他方法可以将其保留在课堂内,为什么首先无法bar访问?
TL; DR:序言 self
Swift可能会误导错误消息,但在这种情况下,答案可以从消息中推断出来.它正在寻找bar类型Foo.Type,而您正在尝试引用实例变量.这是有效的代码:
class Foo {
private let bar = "bar"
lazy var baz : String = {
return "baz \(self.bar)"
}()
}
Run Code Online (Sandbox Code Playgroud)