我有一个基类:
class ViewController: UIViewController
{
init(nibName nibNameOrNil: String?)
{
super.init(nibName: nibNameOrNil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) { }
}
子类:
class OneViewController: ViewController
{
private var one: One
init(one: One)
{
self.one = one
super.init(nibName: "OneNib")
}
required init?(coder aDecoder: NSCoder) { }
}
以及上述子类的子类:
class TwoViewController: OneViewController
{
private var two: Two
init(two: Two)
{
self.two = two
super.init(nibName: "TwoNib") <== ERROR
}
required init?(coder aDecoder: NSCoder) { }
}
在指示的行我得到错误:
对成员“init(one:)”的引用不明确
我不明白为什么编译器无法理解我指的是 ViewController
的 init()
,就像它在 中设法做到的那样>一个
的init()
。
我错过了什么和/或做错了什么?
最佳答案
I don't understand why the compiler can't figure out I'm referring to ViewController's
init()
, like it managed to do in One'sinit()
这是因为,从 TwoViewController 内部,编译器无法看到 ViewController 的init
。规则是:
一旦您实现了指定的构造器,您就阻止了构造器的继承。
因此,OneViewController 只有一个 初始化器,即init(one:)
。因此,这是 TwoViewController 可以调用的唯一 super
初始化器。
如果您希望 ViewController 的 init(nibName:)
出现在 OneViewController 中,您必须在 OneViewController 中实现它(即使它所做的只是调用 super
).
关于ios - "Ambiguous reference to member ' init(...)"调用基类初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166621/