2016-09-23 2 views
1

Swift 3 führte das neue Schlüsselwort open ein, das ich in einem Framework verwende.Muss der Initialisierer einer offenen Klasse ebenfalls geöffnet sein?

Benötigt eine open Klasse in diesem Framework einen open Initialisierer, der außerhalb des genannten Frameworks verwendet werden soll, oder erbt die Init-Funktion die open Deklaration für die Klasse?

Zum Beispiel:

open class OpenClass { 
    var A: String 

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

Side Frage: Haben Sie die Variablen in der offenen Klasse OpenClass erben die offene Art ihrer Klasse?

Antwort

3

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

Initializers beteiligen sich nicht an offenen Prüfung; Sie können nicht als offen deklariert werden, und es gibt keine Einschränkungen bei der Bereitstellung eines Initialisierers, der dieselbe Signatur wie ein Initialisierer in der Oberklasse hat.

Sie brauchen nicht und Sie können keine Init-Methode als offen deklarieren:

open class OpenClass { 

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

    } 
} 

Die Standard-Zugriffsebene für alle Mitglieder einer Klasse (Eigenschaften und Methoden) ist intern, dass gilt auch für offene Klassen.

Verwandte Themen