2014-06-22 63 views
0

我有以下init方法在我的視圖控制器:在super.init呼叫物業未初始化

init(mainViewController: UIViewController, settingsViewController: UIViewController, gap: Int) { 
     self.mainViewController = mainViewController 
     self.settingsViewController = settingsViewController 
     self.gap = gap 

     self.setupScrollView() // I get error here 

     super.init(nibName: nil, bundle: nil) //and here. 
    } 

self.setupScrollView方法現在看起來就像這樣:

func setupScrollView() { 
     self.scrollView = UIScrollView(frame: CGRectZero) 
     self.scrollView.setTranslatesAutoresizingMaskIntoConstraints(false) 
     self.view.addSubview(self.scrollView) 
    } 

我得到的錯誤是:

self used before super.init callProperty 'self.scrollView' not initialized at super.init call

我看過類似的帖子,沒有任何運氣。任何幫助,將不勝感激!

回答

2

可以通過聲明scrollView作爲可選的移動下面的super.init呼叫設置方法調用做到這一點。聲明是這樣的:

var scrollView : UIScrollView? 

而且初始化:

init(mainViewController: UIViewController, settingsViewController: UIViewController, gap: Int) { 
    //other stuff 
    super.init(nibName: nil, bundle: nil) 
    self.setupScrollView() 
} 

func setupScrollView() { 
    scrollView = UIScrollView(frame: CGRectZero) 
    scrollView!.setTranslatesAutoresizingMaskIntoConstraints(false) 
    view.addSubview(scrollView!) 
} 
+0

這奏效了,謝謝!但爲什麼這是必要的?另外我雖然當一個參數是可選的,你應該這樣調用它:'scrollView!.setTranslatesAutoresizingMaskIntoConstraints(false)'並且不強制解包它? –

+0

我的意思是調用它像這樣,而不是:'滾動視圖.setTranslatesAutoresizingMaskIntoConstraints(假)' –

+0

這是行不通的,因爲編譯器是不知道,如果該值不爲零?通過使用'!'你認爲它不是零。如果您無法確定,請在展開前進行額外的檢查。 – Adam