在惰性构造函数中访问实例常量

Eri*_*ner 2 swift

考虑这个例子

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访问?

Chr*_*ver 5

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)