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

时间:2014-11-03 18:50:03

标签: swift

考虑这个例子

class Foo {
    private let bar = "bar"

    lazy var baz : String = {
        return "baz \(bar)"
    }()
}

不幸的是,这不会编译并给出以下错误

'Foo.Type' does not have a member named 'bar'

我真的不想在课堂外宣布bar(全局)。是否没有其他方法可以将其保留在课堂内,为什么首先无法访问bar

2 个答案:

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