在尝试以编程方式在我当前的项目中实现可可豆荚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)或重写该函数。