使用包含闭包的类型初始化程序初始化属性时的编译错误

时间:2017-06-20 10:18:22

标签: swift

你能解释为什么会出现这种错误吗?最好能解决这个问题吗?

class A {

    init(_ closure: @escaping () -> ()) {
        print("")
    }
}

class B {

    var s: String?

    lazy var a = A {

        self.s = ""
    }
}

error: use of unresolved identifier 'self'
        self.s = ""
        ^~~~

2 个答案:

答案 0 :(得分:1)

如果lazy属性的初始值引用self,则它需要显式类型注释。因此,您需要显式写入类型A

lazy var a:A = A {
self.s = ""
}

答案 1 :(得分:0)

正如 @Sahil 在他的回答中指出的那样,由于某些晦涩的原因,懒惰的存储属性需要类型注释,只要它依赖于self。你的代码会变成:

class B {
    var s: String?
    lazy var a: A = A {
        self.s = ""
    }
}

使用A的显式类型注释。