Swift 'open' - Schlüsselwort & überschreibbare Methode/Eigenschaften in der Erweiterung?

Mit der Einführung der open Schlüsselwort in Swift 3.0 (Was ist die 'open' - Schlüsselwort in Swift?).

Hinweis: Begrenzte Erweiterungen auf NSObject abgeleitete Klassen oder @objc zugeschrieben-Methode/Eigenschaften.

Code wich deklariert und verwendet public (class) Methoden/Eigenschaften in der Erweiterung über Module/frameworks brach, als public ist nicht mehr heißt 'overridable' außerhalb des definierenden Moduls.

Beispiel:

public extension UIManagedDocument {

    public class func primaryDocumentName() -> String {
        return "Document"
    }

    public class func primaryStoreURL() -> URL {
        let documentsURL = FileManager.default.userDocumentsURL
        return URL(fileURLWithPath: self.primaryDocumentName(), isDirectory: false, relativeTo: documentsURL)
    }

    public class func primaryModelName() -> String? {
        return "Model"
    }

}
  • Ursprünglichen Vorschlag (SE-0117) konzentriert sich auf die Unterklassen und nicht erwähnen extensions.
  • Derzeit Erweiterungen nicht unterstützen open keyword (kann man nicht schreiben open extension NSObject sowie open func Method())

Frage: gibt es Abhilfe, um in der Lage sein, überschreiben Erweiterung Methoden/Eigenschaften über Module/frameworks?

  • Ist dies wirklich im Zusammenhang mit der neuen open vs den Zugang der öffentlichkeit Modi? Wenn ich mich nicht Irre, haben Sie nicht außer Kraft setzen kann deklarierten Methoden in extensions sowieso, weder in Swift 2 noch im Swift-3).
  • Sie Recht für Reine swift-Klassen, aber man kann auf NSObject abgeleitet Klassen sowie mit @objc zugeschrieben Eigenschaften/Methoden. (Können Sie überschreiben Sie zwischen Erweiterungen in Swift oder nicht?)
  • Ich sehe, danke. (Vielleicht kann man hinzufügen, dass die Informationen zu der Frage).
  • Sicherlich tun wird
  • Und danke für die Erinnerung mich über meine eigene Antwort 🙂
InformationsquelleAutor Nocross | 2016-08-25
Schreibe einen Kommentar