【问题标题】:'super.init' isn't called on all paths before returning from initializer在从初始化程序返回之前,不会在所有路径上调用“super.init”
【发布时间】:2018-05-29 07:20:27
【问题描述】:

我是 swift 的新手,现在我被困在继承中。在这里,我使用两个类 A 类和 B 类。 B 类继承了 A 类的一些属性。这是代码。

class A
{
    var objRunningJobs:UIViewController!
    var objCompletedJobs:UIViewController!
    init(objRunningJobs:UIViewController, objCompletedJobs: UIViewController) {
        self.objRunningJobs = objRunningJobs
        self.objCompletedJobs = objCompletedJobs
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

class B: A
{
    override init(objRunningJobs:UIViewController, objCompletedJobs: UIViewController) {
        super.init(objRunningJobs: objRunningJobs, objCompletedJobs: objCompletedJobs)
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

在 A 类中,在初始化之后,我得到了错误 'super.init' 在从初始化程序返回之前没有在所有路径上调用。

【问题讨论】:

  • 我无法重现该错误。 A 的超类是什么?它应该有一个。
  • 如果 A 类扩展 ViewController 则超类是 ViewController 类。如果不是,那么超类是 Object 类
  • A 类:UIViewController {}
  • 那么你得到了答案。它应该可以工作,你能把你用于初始化的代码写给我吗?
  • 哦!尝试从 B 类初始化器中删除覆盖

标签: ios swift inheritance


【解决方案1】:

简答:

class A: UIViewController {
let objRunningJobs: UIViewController
let objCompletedJobs: UIViewController

init(objRunningJobs:UIViewController, objCompletedJobs: UIViewController) {
    self.objRunningJobs = objRunningJobs
    self.objCompletedJobs = objCompletedJobs
    super.init(nibName: "TestNib", bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

用你的替换“TestNib”。 但这是初始化 UIViewController 子类的不好方法。 可能,您不了解 UIViewController 的角色及其层次结构。你想在你的应用中做什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2015-09-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多