Czym jest słowo kluczowe "open" w języku Swift?
The ObjectiveC.swift
Plik z biblioteki standardowej zawiera kilka następujących linii kodu wokół linii 228:
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
Co oznacza open var
w tym kontekście, lub co jest słowem kluczowym open
w ogóle?
5 answers
open
jest nowym poziomem dostępu w Swift 3, wprowadzonym wraz z implementacją
z
Jest on dostępny z migawką Swift 3 od 7 sierpnia 2016, oraz Xcode 8 beta 6.
W skrócie:
- klasa
open
jest dostępna i podklasowalna poza definiowanie modułu. Klasa jest dostępna dla klasyopen
oraz overridable poza modułem definiującym. - a
public
klasa jest dostępna ale nie podklasowalna poza definiowanie modułu. Apublic
class member is accessible but nie nadpisywalne poza modułem definiującym.
Więc open
jest tym, co public
było w poprzednim
Szybkie wydania i dostęp do public
został ograniczony.
Lub, Jak to ujął Chris Lattner
SE-0177: pozwolić na rozróżnienie pomiędzy publicznymi dostęp i publiczne nadpisywanie :
"otwarty" jest teraz po prostu "bardziej publiczny niż publiczny", zapewniając bardzo prosty i czysty model.
W twoim przykładzie, open var hashValue
jest właściwością, która jest dostępna i może być nadpisana w NSObject
podklasach.
Aby uzyskać więcej przykładów i szczegółów, spójrz na SE-0117 .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 03:33:43
Czytaj Otwórz jako
Otwarte dla dziedziczenia w innych modułach
Powtarzam otwarty dla dziedziczenia w innych modułach. Tak więc klasa otwarta jest otwarta do podklasowania w innych modułach, które zawierają moduł definiujący. Otwarte var i funkcje są otwarte do nadpisywania w innych modułach. To najmniej restrykcyjny poziom dostępu. Jest tak dobry jak publiczny dostęp, z wyjątkiem tego, że coś, co jest publiczne, jest zamknięte dla dziedziczenia w innych modułach.
Z Jabłka Docs :
Otwarty dostęp dotyczy tylko klas i członków klasy i różni się od publicznego dostępu następująco:
Klasy z publicznym dostępem, lub innym bardziej restrykcyjnym poziomem dostępu, mogą być podklasowane tylko w module, w którym są zdefiniowane.
Członkowie klasy z publicznym dostępem, lub innym bardziej restrykcyjnym poziomem dostępu, mogą być nadpisywane przez podklasy tylko w module, gdzie są zdefiniowany.
Zajęcia otwarte mogą być podklasowane w module, w którym są zdefiniowane, oraz w dowolnym module, który importuje moduł, w którym są zdefiniowane.
Członkowie klasy otwartej mogą być nadpisywani przez podklasy w module, w którym są zdefiniowane, oraz w dowolnym module, który importuje moduł, w którym są zdefiniowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-08 11:52:51
Open jest poziomem dostępu, został wprowadzony w celu nałożenia ograniczeń dziedziczenia klas na Swift.
Oznacza to, że otwarty Poziom dostępu może być stosowany tylko do klas i członków klas .
W Klasach
Klasa otwarta może być podklasowana w module, w którym jest zdefiniowana, oraz w modułach, które importują moduł, w którym jest zdefiniowana Klasa.
In Class members
To samo dotyczy członków klasy. Metoda Otwarta może być nadpisane przez podklasy w module jest zdefiniowany w i 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 nie pozwala również na nadpisywanie tych samych metod i klas,
Więc po tym dodaniu będą stosować poziomy dostępu publicznego i prywatnego odpowiednio.
Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Apple dotyczącą kontroli dostępu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 16:32:34
Otwórz się, aby grać, gdy masz do czynienia z wieloma modułami.
Klasa otwarta jest dostępna i podklasowalna poza modułem definiującym. Członek klasy otwartej jest dostępny i nadpisywalny poza modułem definiującym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-24 06:32:01
Open jest tylko dla innego modułu, na przykład: Cocoa pods, lub unit test, możemy dziedziczyć lub nadpisywać
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-18 23:54:28