2014-10-27 34 views
1

我想在MapManager中使用IBOutlet mapView。爲了實現這種連接,我必須將mapView呈現給MapManager。我認爲這樣的事情會起作用:在不斷的初始化中使用IBoutlet

@IBOutlet var mapView: MKMapView! 
    var locationManager = CLLocationManager() 
    var userLocation: MKUserLocation! 
    let mapManager: MapManager = MapManager(MapView : mapView) 

現在,我不知道這是否是一個正確的方法來做到這一點。我的意思是,我基本上會在模型中使用mapView,這不是最好的做法。那麼我怎麼才能實現這個想法呢?

回答

1

我認爲你的代碼不應該編譯,因爲當初始化mapManager時,你隱式引用了self,直到所有的類屬性都被初始化爲止。

我將通過定義隱含展開mapManager物業解決這一問題:

var mapManager: MapManager! 

這是當mapView設置初始化:引用mapManager你之前

@IBOutlet var mapView: MKMapView! { 
    didSet { 
     self.mapManager = MapManager(MapView: mapView) 
    } 
} 

當然必須確保mapView已被初始化,否則會引發運行時異常。

+0

謝謝!一個設計問題;這是一個正確的方法嗎? – Kraishan 2014-10-27 11:58:05

+0

一般來說,是的,但這取決於具體問題。通常情況下,事情可以以多種方式完成。根據您的意見,這看起來是最合乎邏輯的解決方案。 – Antonio 2014-10-27 12:06:53

+0

感謝您的快速幫助! – Kraishan 2014-10-27 12:17:00

相關問題