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



考虑这个例子

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)"
}()

最新更新