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