为什么需要在公共访问控制viewController中覆盖viewDidLoad之前设置public,所以>

问题描述 投票:6回答:3

为什么在公共访问控制viewController中覆盖viewDidload之前需要设置公共对象,所以>

public class customViewController: UIViewController {
    override public func viewDidLoad() {
        super.viewDidLoad()
    }
}

如果我取消公开,Xcode将发出错误警告!

为什么要在公共访问控制viewController公共类中重写viewDidload之前设置public,所以UIUIController {

错误消息相当明确:
覆盖实例方法必须与声明一样容易访问覆盖。

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

例如,给定此类:

public class Superclass { internal func doSomething() { ... } }

然后您无法使用比doSomething更少访问的方法来覆盖interal。例如

public class Subclass : Superclass { // error private override func doSomething() { } }

但是,您可以重写方法并使它

more

可访问:
public class Subclass : Superclass {
    public override func doSomething() {
        // You can even call the internal method in the superclass
        super.doSomething()
    }
}

reference documentation对此有很多详细信息,但似乎使这种关系含蓄了。

取自here

Public访问权限使实体可以在其定义模块的任何源文件中使用,也可以在导入定义模块的另一个模块的源文件中使用。在指定框架的公共接口时,通常使用公共访问。
Internal访问权限使实体可以在其定义模块的任何源文件中使用,但不能在该模块外部的任何源文件中使用。通常,在定义应用程序或框架的内部结构时使用内部访问。

Private访问将实体的使用限制为包含在声明中。使用私有访问权限可以隐藏特定功能的实现细节。

[File-private访问将实体的使用限制为自己定义的源文件。

您需要公共修饰符吗?您可以这样写:

class customViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } }

无警告

您的课程声明是:

public class customViewController: UIViewController
这将打开customViewControllerpublic的访问权限(公开继承)

写这个给你错误:

override func viewDidLoad() { super.viewDidLoad() }

这里发生的是方法的

默认访问级别

继承性>>如何处理访问级别之间的不愉快交互。

子类必须保留其超类方法的可访问性子类可以在任何地方直接使用的地方。否则,我们会违反了允许我们对待所有种类的替代原则UIViewController中的另一个UIViewController

ios swift public
3个回答
11
投票
覆盖实例方法必须与声明一样容易访问覆盖。

1
投票
Internal访问权限使实体可以在其定义模块的任何源文件中使用,但不能在该模块外部的任何源文件中使用。通常,在定义应用程序或框架的内部结构时使用内部访问。

0
投票
这将打开customViewControllerpublic的访问权限(公开继承)
© www.soinside.com 2019 - 2024. All rights reserved.