2017-06-20 33 views
0

你能解释一下为什么会出现这种错误,什么是最好的解决这个问题类型初始化器的属性是什么时候?编译错误初始化与包含封闭

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 = "" 
     ^~~~ 

回答

1

如果它的初始值指向self,那么lazy属性需要显式类型注释。所以,你需要明确写入型A

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

下面是详细的说明https://stackoverflow.com/questions/38118429/swift-lazy-instantiating-using-self – Sahil

0

由于@Sahil在他的回答中指出,对于一些模糊的原因,懒洋洋地存储属性需要一个类型标注,每当这取决于self。与A

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

有明确的类型标注:您的代码将变成。