为什么需要在公共访问控制viewController中覆盖viewDidload之前设置public

Den*_*nis 6 public ios swift

为什么需要在公共访问控制viewController中覆盖viewDidload之前设置public

public class customViewController: UIViewController {
    override public func viewDidLoad() {
        super.viewDidLoad()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除公众,Xcode会给出错误警告!

Ste*_*ord 10

错误消息非常明确:

重写实例方法必须与它覆盖的声明一样可访问.

这意味着方法的访问级别不得低于覆盖的方法.

例如给出这个类:

public class Superclass {
    internal func doSomething() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您无法doSomething使用不太容易访问的方法覆盖interal.例如

public class Subclass : Superclass {
    // error
    private override func doSomething() {
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您可以覆盖方法并使其易于访问:

public class Subclass : Superclass {
    public override func doSomething() {
        // You can even call the internal method in the superclass
        super.doSomething()
    }
}
Run Code Online (Sandbox Code Playgroud)

参考文档有很多细节上的这一点,但似乎离开这个关系的意义.