Uczę się Swift i czytam The Swift Programming Language
od Apple, nie mam tła Objective C (tylko PHP, JS i inne, ale bez Obj C)
Na stronach 24-25 widzę ten kod:
//...Class definition stuff...
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
//...Class continues...
Ta część NIE jest opisana w książce i nie mogę znaleźć tego, do czego służą.
Czy ktoś może mi wyjaśnić, czym są get i set ?
Odpowiedzi:
Faktycznie zostało to wyjaśnione tuż przed kodem:
Gdy inna klasa chce pobrać tę zmienną obwodową, robią to:
... co nazywa się tym:
Zasadniczo wygląda to tak, jakby kontroler wywołujący zrobił to:
Kiedy ustawiasz zmienną z innego obiektu, wygląda to tak:
Który wywołuje kod w
set{}
bloku:A więc to tak, jakby klasa ustawiająca zmienną zrobiła to:
To naprawdę tylko dla wygody - możesz wywołać to z innego kodu bez konieczności ciągłego dzielenia przez 3 lub mnożenia przez 3, ponieważ robi się to tuż przed ustawieniem zmiennej i tuż przed otrzymaniem zmiennej.
W języku Swift możemy mieć właściwości, które są obliczane podczas pobierania i mogą coś zrobić, gdy są ustawione. Moglibyśmy to zrobić również w Objective-C:
źródło
Pobieranie i ustawianie zmiennych w ramach klas odnosi się do pobierania („pobierania”) lub zmieniania („ustawiania”) ich zawartości.
Rozważmy zmienną
members
klasyfamily
. Oczywiście ta zmienna musiałaby być liczbą całkowitą, ponieważ rodzina nigdy nie może składać się z dwóch punktów, czyli czegoś, co ludzie.Więc prawdopodobnie poszedłbyś dalej, definiując
members
zmienną w następujący sposób:To jednak da ludziom używającym tej klasy możliwość ustawienia liczby członków rodziny na około 0 lub 1. A ponieważ nie ma czegoś takiego jak rodzina 1 lub 0, jest to bardzo niefortunne.
Tutaj wkraczają metody pobierające i ustawiające. W ten sposób możesz samodzielnie zdecydować, jak zmienne mogą być zmieniane i jakie wartości mogą one otrzymać, a także zdecydować, jaką zawartość zwracają.
Wracając do naszej klasy rodzinnej, upewnijmy się, że nikt nie może ustawić
members
wartości mniejszej niż 2:Teraz możemy uzyskać dostęp do
members
zmiennej, jak poprzednio, przez pisanieinstanceOfFamily.members
, a dzięki funkcji setter, możemy także ustawić jego wartość jak poprzednio, przez pisanie, na przykład:instanceOfFamily.members = 3
. Zmieniło się jednak to, że nie możemy już ustawić tej zmiennej na wartość mniejszą niż 2.Zwróć uwagę na wprowadzenie
_members
zmiennej, która jest rzeczywistą zmienną do przechowywania wartości ustawionej przez funkcjęmembers
ustawiającą. Oryginałmembers
stał się teraz własnością obliczoną, co oznacza, że działa tylko jako interfejs do obsługi naszej rzeczywistej zmiennej.źródło
members
==>count
,numberOfMembers
;var members : Set<Person>
??set (newVal) { ... }
, zakłada się newVal, więcset { _members = newVal }
jest również poprawne._members
powinny być prywatne, w przeciwnym razie polecenieinstanceOfFamily._members=1
ustawiłobyinstanceOfFamily.members
wartość poniżej 2newValue
w Swift 4 - docs.swift.org/swift-book/LanguageGuide/Properties.html#ID260Po prostym pytaniu powinna następować krótka, prosta i jasna odpowiedź.
Kiedy uzyskujemy wartość nieruchomości, odpala jej
get{}
część.Kiedy ustawiamy wartość właściwości, odpala jej
set{}
część.PS. Podczas ustawiania wartości właściwości, SWIFT automatycznie tworzy stałą o nazwie „nowaWartość” = ustawiana przez nas wartość. Po tym, jak stała „nowa wartość” staje się dostępna w pliku właściwości
set{}
.Przykład:
źródło
Powinieneś spojrzeć na obliczone właściwości
W przykładowym kodzie
perimeter
jest to właściwość, która nie jest zabezpieczona przez zmienną klasy, zamiast tego jej wartość jest obliczana przy użyciuget
metody i przechowywana za pośrednictwemset
metody - zwykle nazywanej pobierającą i ustawiającą .Kiedy używasz tej właściwości w następujący sposób:
wywołujesz kod zawarty w
get
bloku kodu, a kiedy używasz go w ten sposób:wywołujesz kod zawarty w
set
bloku kodu, gdzienewValue
jest on automatycznie wypełniany wartością podaną po prawej stronie operatora przypisania.Obliczone właściwości mogą być do odczytu i zapisu, jeśli określono zarówno metodę pobierającą, jak i ustawiającą, lub tylko do odczytu, jeśli określono tylko metodę pobierającą.
źródło
zmienna deklaruje i wywołuje w klasie w ten sposób
teraz chcesz zaprogramować, aby domyślna wartość x była większa lub równa 3. Teraz weź hipotetyczny przypadek, jeśli x jest mniejsze niż 3, twój program zakończy się niepowodzeniem. więc chcesz, aby ludzie umieszczali 3 lub więcej niż 3. Swift ułatwił ci zadanie i ważne jest, aby zrozumieć ten nieco zaawansowany sposób datowania wartości zmiennej, ponieważ będą one szeroko wykorzystywane w programowaniu iOS. Zobaczmy teraz, jak zostanie tutaj użyte get and set.
jeśli nadal masz wątpliwości, pamiętaj, że użycie get and set służy do aktualizowania dowolnej zmiennej w sposób, w jaki chcemy, aby była aktualizowana. get and set da ci lepszą kontrolę nad twoją logiką. Potężne narzędzie, stąd niełatwe do zrozumienia.
źródło