2017-06-20 60 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 = "" 
    } 
} 

有明確的類型標註:您的代碼將變成。