【问题标题】:Property not initialized at super.init call属性未在 super.init 调用时初始化
【发布时间】:2014-06-22 12:25:55
【问题描述】:

我的视图控制器中有以下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

我看过类似的帖子没有任何运气。任何帮助将不胜感激!

【问题讨论】:

    标签: uiviewcontroller uiscrollview initialization swift ios8


    【解决方案1】:

    您可以通过将scrollView 声明为可选并将setup 方法调用移至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!)
    }
    

    【讨论】:

    • 成功了,谢谢!但究竟为什么这是必要的呢?另外我虽然当一个参数是可选的时你应该这样称呼它:scrollView!.setTranslatesAutoresizingMaskIntoConstraints(false) 而不是强制打开它?
    • 我的意思是这样称呼它:scrollView?.setTranslatesAutoresizingMaskIntoConstraints(false)
    • 这不起作用,因为编译器不确定该值是否不为零。通过使用!,您假设它不是零。如果您不能确定,请在打开包装前进行额外检查。
    • @Nilzone- 在这种情况下,强制展开 (!) 是安全的,因为您刚刚为 scrollView 分配了一个值。
    • @David 但如果我不确定,这样称呼它不正确:scrollView?.setTranslatesAutoresizingMaskIntoConstraints(false)?使用if 检查课程
    猜你喜欢
    • 2020-07-06
    • 2014-10-09
    • 1970-01-01
    • 2015-07-05
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    相关资源
    最近更新 更多