You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift继承初始化报错:'super.init'未在所有路径调用

解决Swift类继承中的初始化器错误

嘿,我来帮你搞定这个初始化的问题!你遇到的'super.init' isn't called on all paths before returning from initializer错误,根源出在类A的初始化逻辑里缺少了父类初始化方法的调用。

错误原因解析

Swift中,所有没有显式指定父类的自定义类,默认会继承NSObject。而NSObject的指定初始化器是init(),作为子类的类A,必须在完成自身属性的赋值后,调用父类的初始化方法,确保父类的部分也能被正确初始化。你的类A当前的初始化器只处理了自己的属性,没有调用super.init(),这就违反了Swift的初始化规则,导致了报错。

修正后的代码

我们只需要在类A的初始化器中添加super.init()调用即可,同时如果类B没有额外的属性或逻辑需要初始化,还可以简化代码:

class A {
    var objRunningJobs: UIViewController!
    var objCompletedJobs: UIViewController!
    
    init(objRunningJobs: UIViewController, objCompletedJobs: UIViewController) {
        self.objRunningJobs = objRunningJobs
        self.objCompletedJobs = objCompletedJobs
        // 添加父类初始化调用,完成父类部分的初始化
        super.init()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

// 如果类B没有额外的初始化逻辑,可以省略override init,Swift会自动继承父类的指定初始化器
class B: A {
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

补充说明

如果之后你的类B需要添加自己的属性或者自定义初始化逻辑,再显式重写初始化器也完全没问题。现在这样的写法既符合Swift的初始化规则,又能保持代码的简洁性。

内容的提问来源于stack exchange,提问作者Priti Kanauziya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:50:08