mea*_*ers 7 inheritance super ios swift swift2
我有一个基类:
class ViewController: UIViewController
{
init(nibName nibNameOrNil: String?)
{
super.init(nibName: nibNameOrNil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) { }
}
Run Code Online (Sandbox Code Playgroud)
子类:
class OneViewController: ViewController
{
private var one: One
init(one: One)
{
self.one = one
super.init(nibName: "OneNib")
}
required init?(coder aDecoder: NSCoder) { }
}
Run Code Online (Sandbox Code Playgroud)
以及上述子类的子类:
class TwoViewController: OneViewController
{
private var two: Two
init(two: Two)
{
self.two = two
super.init(nibName: "TwoNib") <== ERROR
}
required init?(coder aDecoder: NSCoder) { }
}
Run Code Online (Sandbox Code Playgroud)
在指定的行我得到错误:
Ambiguous reference to member 'init(one:)'
我不明白为什么编译器无法弄清楚我指的是ViewController的init(),喜欢它设法在做One的init().
我错过了什么和/或做错了什么?
我不明白为什么编译器无法弄清楚我指的是ViewController
init(),就像它设法在One中做的那样init()
这是因为,从TwoViewController内部,编译器无法看到 ViewController init.规则是:
一旦实现了指定的初始化程序,就会阻止初始化程序的继承.
因此,OneViewController只有一个初始化程序,即init(one:).因此,这是superTwoViewController可以调用的唯一初始化程序.
如果你希望ViewController init(nibName:)出现在OneViewController中,你必须在OneViewController中实现它(即使它只是调用它super).
| 归档时间: |
|
| 查看次数: |
4749 次 |
| 最近记录: |