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

per*_*rry 3 keyword swift 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*n R 5

SE-0117开始,允许区分公共访问权限和公共可重写权限

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

您不需要,也可以将init方法声明为open:

open class OpenClass {

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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