W języku Swift, jaki jest konwencjonalny sposób definiowania wspólnego wzorca, w którym właściwość ma być zewnętrznie tylko do odczytu, ale może być modyfikowana wewnętrznie przez klasę (i podklasy), które są jej właścicielami.
W Objective-C są następujące opcje:
- Zadeklaruj właściwość jako tylko do odczytu w interfejsie i użyj rozszerzenia klasy, aby uzyskać dostęp do właściwości wewnętrznie. Jest to dostęp oparty na wiadomościach, dlatego dobrze współpracuje z KVO, atomowością itp.
- Zadeklaruj właściwość jako tylko do odczytu w interfejsie, ale uzyskaj dostęp do zaplecza ivar wewnętrznie. Ponieważ domyślny dostęp do ivar jest chroniony, działa to dobrze w hierarchii klas, w której podklasy również będą mogły modyfikować wartość, ale w przeciwnym razie pole jest tylko do odczytu.
W Javie konwencja to:
- Zadeklaruj chronione pole i zaimplementuj publiczną metodę pobierającą tylko do odczytu.
Jaki jest idiom dla Swift?
źródło
var
słowo kluczowe, aby je skompilować.)public
- powinna byćinternal
lub wcale (która domyślnie jest taka, jaka jest -public
lubinternal
) - tj.private(set) var readonlyProperty: Int
private
teraz ogranicza się do bieżącej deklaracji (nie do pliku) ifileprivate
jest dostępne do ograniczenia do bieżącego pliku. Równieżpublic
ma pewne ograniczenia iopen
jest potrzebny do żadnych ograniczeń. Szczegóły tutaj .Zgodnie z @Antonio, możemy użyć pojedynczej właściwości, aby uzyskać dostęp jako
readOnly
wartość właściwości publicznie ireadWrite
prywatnie. Poniżej moja ilustracja:A oto wynik:
źródło