Die ObjectiveC.swift
Datei aus der Standardbibliothek enthält die folgenden Codezeilen um Zeile 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Was open var
bedeutet in diesem Zusammenhang oder was ist das open
Schlüsselwort im Allgemeinen?
open
undpublic
?")Antworten:
open
ist eine neue Zugriffsebene in Swift 3, die mit der Implementierung von eingeführt wurdeEs ist mit dem Swift 3-Snapshot vom 7. August 2016 und mit Xcode 8 Beta 6 verfügbar.
Zusamenfassend:
open
Klasse ist außerhalb des definierenden Moduls zugänglich und unterklassifizierbar . Einopen
Klassenmitglied ist außerhalb des definierenden Moduls zugänglich und überschreibbar .public
Klasse ist außerhalb des definierenden Moduls zugänglich, aber nicht unterklassifizierbar . Einpublic
Klassenmitglied ist außerhalb des definierenden Moduls zugänglich, aber nicht überschreibbar .So war
open
espublic
auch in früheren Swift-Versionen, und der Zugriff aufpublic
wurde eingeschränkt. Oder, wie Chris Lattner es in SE-0177 formuliert: Ermöglichen Sie die Unterscheidung zwischen öffentlichem Zugang und öffentlicher Überschreibbarkeit :In Ihrem Beispiel
open var hashValue
handelt es sich um eine Eigenschaft, auf die zugegriffen werden kann und die inNSObject
Unterklassen überschrieben werden kann .Weitere Beispiele und Details finden Sie unter SE-0117 .
quelle
public
in Swift 3 ist wiepublic final
in Swift 2 undopen
ist wiepublic
?Lesen Sie offen als
Ich wiederhole offen für die Vererbung in anderen Modulen. Eine offene Klasse ist also offen für Unterklassen in anderen Modulen, die das definierende Modul enthalten. Offene Variablen und Funktionen können in anderen Modulen überschrieben werden. Es ist die am wenigsten restriktive Zugriffsebene. Es ist so gut wie der öffentliche Zugang zu akzeptieren, dass etwas, das öffentlich ist, für die Vererbung in anderen Modulen geschlossen ist.
Aus Apple Docs :
quelle
Open ist eine Zugriffsebene, die eingeführt wurde, um Swift die Klassenvererbung einzuschränken.
Dies bedeutet, dass die Open Access-Ebene nur auf Klassen und Klassenmitglieder angewendet werden kann .
In Klassen
Eine offene Klasse kann in dem Modul, in dem sie definiert ist, und in Modulen, die das Modul importieren, in dem die Klasse definiert ist, in Unterklassen unterteilt werden.
In Klassenmitgliedern
Gleiches gilt für Klassenmitglieder. Eine offene Methode kann durch Unterklassen in dem Modul, in dem sie definiert ist, und in Modulen, die das Modul importieren, in dem die Methode definiert ist, überschrieben werden.
DIE NOTWENDIGKEIT FÜR DIESES UPDATE
Einige Klassen von Bibliotheken und Frameworks sind nicht für die Unterklasse ausgelegt. Dies kann zu unerwartetem Verhalten führen. In der nativen Apple-Bibliothek können dieselben Methoden und Klassen auch nicht überschrieben werden.
Nach dieser Hinzufügung wenden sie die öffentlichen und privaten Zugriffsebenen entsprechend an.
Weitere Informationen finden Sie in der Apple-Dokumentation zur Zugriffssteuerung
quelle
Mit Ausnahme der Unterklasse ist eine
open class func
auch von überall in Ihrem Projekt zugänglich. Angenommen, Sie definieren eine offene Klassenfunktion in Ihrer Util-Klasse wie folgtIn jedem Ihrer View Controller können Sie dann einfach durch Aufrufen auf diese Methode zugreifen
quelle
open come to play beim Umgang mit mehreren Modulen.
Die offene Klasse ist außerhalb des definierenden Moduls zugänglich und unterklassifizierbar. Ein offenes Klassenmitglied ist außerhalb des definierenden Moduls zugänglich und überschreibbar.
quelle
Öffnen ist nur für ein anderes Modul, zum Beispiel: Kakaofrüchte oder Unit-Test, den wir erben oder überschreiben können
quelle