2017-08-10 53 views
0

我的視圖控制器看起來是這樣的:自由封閉拍攝的所有成員都初始化之前

class ViewController: UIViewController { 

... (Optional Variables declared) 

var geoLoc: CLLocationCoordinate2D? 

override func viewDidLoad() { 
... (Optional Variables initialized) 
     geocoder.geocodeAddressString(addressString) { (placemarks, error) in 
      self.geoLoc = placemarks?[0].location?.coordinate 
     } 

} 

} 

和我收到此錯誤:

'self' captured by a closure before all members were initialized 

我已經嘗試了許多死衚衕的解決方法,但根本找不到問題的原因。有什麼建議麼?

+0

您在ViewController中創建了哪些其他屬性?所有類的屬性必須初始化,然後才能在課程中的任何位置使用自己。 – PGDev

+0

這看起來不像你應該得到這個錯誤的地方。你確定這段代碼不在init中嗎?你有沒有實現一個自定義的'init'?這真的是錯誤出現的地方嗎?在'viewDidLoad'中看到這個錯誤是很奇怪的。 –

+0

這是一個奇怪的行爲。 Swift應該輸出錯誤消息:在所有成員僅在初始化器中初始化之前,閉包捕獲的_'self'。似乎你省略了太多。 (例如,你的類缺少':UIViewController'。)請顯示更多可以重現你的問題的代碼。 – OOPer

回答

1

問題是你的類中只有一些變量是隻聲明的,但在捕獲被調用的時候沒有被初始化,你指的是self

聲明一個變量:var a: Int並初始化它:var a:Int = 0var a:Int? = nil是不一樣的。

在您可以參考self之前,您的類的所有變量都需要初始化(給定一個初始值)。