`open`类的初始化程序是否也需要打开?

时间:2016-09-23 01:00:41

标签: swift keyword swift3

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中的变量是否继承了班级的开放性?

1 个答案:

答案 0 :(得分:4)

来自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'

    }
}

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