perhapsmaybeharry perhapsmaybeharry - 11 months ago 73
Swift Question

Does the initializer of an `open` class need to be open as well?

Swift 3 introduced the new open keyword that I'm using in a framework.

Does an

class in this framework require an
initialiser to be used outside of said framework, or does the init function inherit the
declaration on the class?

For example:

open class OpenClass {
var A: String

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

Side question: do the variables in the open class
inherit the open nature of their class?

Answer Source

From SE-0117 Allow distinguishing between public access and public overridability:

Initializers do not participate in open checking; they cannot be declared open, and there are no restrictions on providing an initializer that has the same signature as an initializer in the superclass.

You need not and you cannot declare a init method as open:

open class OpenClass {

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


The default access level for all members of a class (properties and methods) is internal, that applies to open classes as well.