Wie man eine Instanz-Eigenschaft ist nur sichtbar Unterklasse swift
Ich versuche zu erklären ein Beispiel-Eigenschaft, die in swift, so dass es nur sichtbar zu dieser Klasse und Unterklassen. Ich glaube, dass dies bezeichnet als geschützte Eigentum in anderen Sprachen. Gibt es eine Möglichkeit, dies zu erreichen in Swift?
InformationsquelleAutor der Frage nwales | 2015-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Access control zusammen Vererbung Linien passt nicht wirklich mit dem design-Philosophien hinter Swift und Cocoa:
Gibt ' s weitere Erklärung auf dem Apple Swift blog.
InformationsquelleAutor der Antwort rickster
Einen Weg, es zu tun ist, definieren Sie die Funktion oder Eigenschaft mit
fileprivate
Schlüsselwort und definiert die Unterklasse in der gleichen Datei etwa so:Natürlich ist das super ärgerlich, da diese Datei ein großes Durcheinander. Nicht zu erwähnen, warum Swift können diese aber nicht
protected
ist einfach nur... argh.InformationsquelleAutor der Antwort funct7
Ich habe einen Weg gefunden (nicht in der richtigen Weise gemäß einem anderen standard Objekt-orientierten Sprachen).
Definieren Sie beide Basis-Klassen und sub-Klassen in einem einzigen .swift-Datei. Dann können Sie den Zugriff auf private Felder deiner Datenbank-Klasse.
Unten tow-Klassen sind definiert in BaseClass.swift-Datei
Diese geben Ihre sub-Klasse, die den Zugriff auf private Variablen.
Stellen Sie sicher, Sie definieren sowohl die base-Klasse und die Unterklasse im gleichen swift-Datei.
Aber es ist immer noch ein problem hier. Sicherheitsfragen. Man kann sich nicht immer erlauben, eine sub-Klasse der Zugriff auf Ihre übergeordnete Klasse " private Felder. Für diese Sache, die Sie definieren können, eine Erweiterung Ihrer sub-Klasse, wo die Eltern der Klasse' privaten Mitglieder nicht zugänglich sind. Versuchen Sie einfach einmal.
Diese Erweiterung definiert ist, in der Unterklasse.swift-Datei.
Wenn du bist okay, mit dieser man diese, andernfalls warten Sie, bis Apple stimmt zu, protected Modifizierer Swift kommenden version (nicht sicher, 3.1 oder 3.x oder v4.0 hat keine Pläne zu unterstützen).
InformationsquelleAutor der Antwort Kumar C