【问题标题】:Does the initializer of an `open` class need to be open as well?`open` 类的初始化程序是否也需要打开?
【发布时间】:2017-01-31 17:42:54
【问题描述】:

Swift 3 引入了我在框架中使用的新 open 关键字。

此框架中的open 类是否需要在所述框架之外使用open 初始化程序,或者init 函数是否继承了该类上的open 声明?

例如:

open class OpenClass {
    var A: String

    init() {           // does this init() function need to be marked open?
        A = String()
    }
}

附带问题:开放类OpenClass 中的变量是否继承了其类的开放性质?

【问题讨论】:

    标签: swift keyword swift3


    【解决方案1】:

    来自SE-0117 Allow distinguishing between public access and public overridability

    初始化器不参与开放检查;它们不能被声明为打开的,并且对于提供与超类中的初始化程序具有相同签名的初始化程序没有任何限制。

    你不需要并且你不能将一个init方法声明为open:

    open class OpenClass {
    
        open init() { // error: only classes and overridable class members can be declared 'open'; use 'public'
    
        }
    }
    

    类的所有成员的默认访问级别(属性 和方法)是内部的,也适用于开放类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 2011-06-11
      • 2013-01-21
      • 1970-01-01
      • 2018-12-28
      • 2015-09-20
      • 1970-01-01
      相关资源
      最近更新 更多