ios - "Ambiguous reference to member ' init(...)"调用基类初始化器

标签 ios swift inheritance swift2 super

我有一个基类:

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:)”的引用不明确

我不明白为什么编译器无法理解我指的是 ViewControllerinit(),就像它在 中设法做到的那样>一个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's init()

这是因为,从 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/

相关文章:

ios - 如何从M3U8文件下载视频?

ios - react native 选择器中的模式不起作用

ios - Xcode 中安装 SQLite 报错

ios - 如何点击 Xcode 模拟器上的特定点

java - 返回带有参数 List<S1>、List<S2> 的 List<T> 的方法,其中 S1 和 S2 扩展 T

c# - 这个派生接口(interface)getter有什么歧义?

ios - 如何消除SwiftUI Form中Section上方的空间?

iphone - 使进度 View 可见

swift - 如何让相机移动得更频繁?

python - 使用双下划线继承类属性