UINavigationController子类初始化程序具有其他依赖项

时间:2018-01-07 04:57:06

标签: ios swift uikit subclass initializer

我正在尝试创建一个UINavigationController的子类,它接受其他依赖项。我还希望能够在初始化时创建和指定根视图控制器。我有这段代码:

init(rootVC: UIViewController, authUser: AppUser) {
    self.authUser = authUser
    super.init(rootViewController: rootVC)
}

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

但是,在尝试初始化时,我收到此错误:

  

致命错误:使用未实现的初始化程序&#init;(nibName:bundle :)'   对于班级

我已经查看了其他SO答案,特别是this one,它建议通过覆盖init(nibName:bundle :)方法来解决问题。但是,这意味着我无法正确注入用户依赖项。如何最好地解决这个问题?

1 个答案:

答案 0 :(得分:1)

您是否尝试过convenience初始化?

convenience init(rootVC: UIViewController, authUser: AppUser) {
    self.init(rootViewController: rootVC)
}

如果您要进行convenience初始化,请阅读this question

修改

您可以这样设置AppUser

final class Navigation: UINavigationController {

    private(set) var authUser: AppUser!

    convenience init(rootVC: UIViewController, authUser: AppUser) {
        self.init(rootViewController: rootVC)
        self.authUser = authUser
    }
}

修改

关注this link

  

这是初始化接收器和推送的便捷方法   导航堆栈上的根视图控制器。每个导航   stack必须至少有一个视图控制器才能充当root。