首页 > 解决方案 > 调用 super.init(nibName: nibNameOrNil, bundle: nil) 时对成员 'init(coder:)' 的模糊引用

问题描述

在尝试以编程方式将可可豆荚 BWWalkthrough 实施到我当前的项目中时,我遇到了初始化函数/继承的问题。

我试图在我自己的类 GetStartedViewController 中继承 BWWalkThroughViewController。

这是来自 BWalkThroughViewController 的代码,它是 UIViewController 的子类:

class BWWalkThroughViewController: UIViewController {
    required public init?(coder aDecoder: NSCoder) {
        // Setup the scrollview
        scrollview.showsHorizontalScrollIndicator = false
        scrollview.showsVerticalScrollIndicator = false
        scrollview.isPagingEnabled = true
        super.init(coder: aDecoder)
    }

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }
}

但是,当我尝试在自己的类中继承 BWWalkthroughViewController 时,在调用 super.init(nibName, bundle) 和另一个错误(初始化程序不会覆盖指定的初始化程序它的超类)当我尝试覆盖init(nibname,bundle)时:

import BWWalkthrough

class GetStartedViewController: BWWalkthroughViewController  {

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

public init(){
    super.init(nibName: nil, bundle: nil) <== ERROR (Ambiguous reference to member 'init(coder:)')
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) <== ERROR (Initializer does not override a designated initializer from its superclass) {
    super.init(nibName: nil, bundle: nil) <== ERROR (Ambiguous reference to member 'init(coder:)')
}
}

我尝试了仅包含公共初始化或仅包含覆盖初始化而不是两者的不同变体,因此我将两者都包含在内以显示错误。

即使当我使用自动完成来调用 super.init 时,显示的只是带有 nscoder 参数的函数,而不是带有 nibName 和 bundle 的函数。

有人可以帮我理解为什么会发生这个错误以及如何解决它吗?我不明白为什么我不能调用 super.init(nibName, bundle) 或覆盖该函数。

标签: iosswiftinitializerdesignated-initializerbwwalkthrough

解决方案


推荐阅读