调用super.init时对成员'init(coder :)'的不明确引用(nibName:nibNameOrNil,bundle:nil)

时间:2018-07-21 22:54:36

标签: ios swift initializer designated-initializer bwwalkthrough

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

我试图在我自己的类GetStartedViewController中将BWWalkThroughViewController子类化。

这是BWWalkThroughViewController中的代码,它是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(coder :)'的歧义引用”,并且出现另一个错误(Initializer不会覆盖a当我尝试覆盖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:)')
}
}

我尝试了仅包含公共init或仅包含override init而不是两者都包含的各种变体,因此我将二者都包含在内以显示错误。

即使当我使用自动完成功能调用super.init时,显示的所有内容都是带有nscoder参数的函数,而不是带有nibName和bundle的函数。

有人可以帮助我了解为什么会发生此错误,以及如何解决该错误?我不明白为什么我不能调用super.init(nibName,bundle)或重写该函数。

0 个答案:

没有答案