ObjectiveC.swift
Plik z biblioteki standardowej zawiera następujące kilka linijek kodu wokół linii 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Co open var
oznacza w tym kontekście lub jakie jest open
ogólnie słowo kluczowe?
open
ipublic
?”)Odpowiedzi:
open
to nowy poziom dostępu w Swift 3, wprowadzony wraz z implementacjąJest dostępny z migawką Swift 3 od 7 sierpnia 2016 r. Oraz z Xcode 8 beta 6.
W skrócie:
open
Klasa jest dostępny i subclassable zewnątrz modułu definiującego. Członekopen
klasy jest dostępny i można go zastąpić poza modułem definiującym.public
Klasa jest dostępny , ale nie subclassable zewnątrz modułu definiującego. Członekpublic
klasy jest dostępny, ale nie można go zastąpić poza modułem definiującym.Więc
open
to, copublic
kiedyś w poprzednich wersjach SWIFT i dostęppublic
został ograniczony. Lub, jak ujął to Chris Lattner w SE-0177: Zezwól na rozróżnienie między publicznym dostępem a publicznym nadpisywaniem :W twoim przykładzie
open var hashValue
jest właściwość, która jest dostępna i którą można zastąpić wNSObject
podklasach.Więcej przykładów i szczegółów znajduje się na SE-0117 .
źródło
public
w Swift 3 jest jakpublic final
w Swift 2 iopen
jest jakpublic
?Czytaj otwarte jako
Powtarzam otwarte dla dziedziczenia w innych modułach. Tak więc otwarta klasa jest otwarta do podklasowania w innych modułach, które zawierają moduł definiujący. Otwarte zmienne i funkcje są otwarte do zastąpienia w innych modułach. Jest to najmniej restrykcyjny poziom dostępu. Jest to tak dobre, jak publiczny dostęp akceptuje, że coś, co jest publiczne, jest zamknięte dla dziedziczenia w innych modułach.
Z Apple Docs :
źródło
Open to poziom dostępu, wprowadzony w celu nałożenia ograniczeń na dziedziczenie klas w Swift.
Oznacza to, że poziom otwartego dostępu można zastosować tylko do klas i członków klasy .
W klasach
Klasę otwartą można podklasować w module, w którym jest ona zdefiniowana, oraz w modułach, które importują moduł, w którym klasa jest zdefiniowana.
Członkowie klasy
To samo dotyczy członków klasy. Metodę otwartą można zastąpić podklasami w module, w którym jest zdefiniowana, oraz w modułach, które importują moduł, w którym metoda jest zdefiniowana.
POTRZEBA TEJ AKTUALIZACJI
Niektóre klasy bibliotek i frameworków nie są zaprojektowane do podklasowania i może to spowodować nieoczekiwane zachowanie. Natywna biblioteka Apple również nie pozwala na przesłonięcie tych samych metod i klas,
Dlatego po dodaniu stosują odpowiednio poziomy dostępu publicznego i prywatnego.
Więcej informacji można znaleźć w dokumentacji Apple na temat kontroli dostępu
źródło
Z wyjątkiem podklasy,
open class func
jest również dostępna z dowolnego miejsca w projekcie. Załóżmy, że definiujesz funkcję klasy otwartej w swojej klasie Util w ten sposóbNastępnie w dowolnym miejscu kontrolerów widoku możesz po prostu uzyskać dostęp do tej metody, dzwoniąc
źródło
open come to play, gdy masz do czynienia z wieloma modułami.
klasa otwarta jest dostępna i można ją podklasować poza modułem definiującym. Członek klasy otwartej jest dostępny i można go zastąpić poza modułem definiującym.
źródło
open jest tylko dla innego modułu, na przykład: strąki kakaowe lub test jednostkowy, możemy odziedziczyć lub zastąpić
źródło