2014-06-22 49 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