Metody i self
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 3 z 57.
Wewnątrz metody self oznacza instancję, na której wywołano tę metodę. self.count i count oznaczają tę samą właściwość, dlatego zwykle pomija się self:
class Counter {
var count = 0
func increment() {
self.count += 1
}
}
let c = Counter()
c.increment()
print(c.count)Wynik:
1self jest potrzebne, gdy parametr ma taką samą nazwę jak właściwość. Wtedy zwykła nazwa oznacza parametr, a self.name oznacza właściwość:
class Player {
var name = "unknown"
func rename(name: String) {
self.name = name
}
}
let p = Player()
p.rename(name: "Ada")
print(p.name)Wynik:
AdaMetody mogą wywoływać inne metody tej samej instancji, dzięki czemu każda metoda jest krótka:
class Cart {
var total = 0
func add(_ price: Int) {
total += price
}
func addTwice(_ price: Int) {
add(price)
add(price)
}
}
let cart = Cart()
cart.addTwice(5)
print(cart.total)Wynik:
10Metoda może również zwracać wartość obliczoną na podstawie właściwości. Tutaj isEmpty() odpowiada na pytanie dotyczące instancji, nie zmieniając jej:
class Cart {
var items: [String] = []
func add(_ item: String) {
items.append(item)
}
func isEmpty() -> Bool {
items.count == 0
}
}
let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())Wynik:
true
falseWyzwanie
ŁatwyUzupełnij klasę Thermostat. setTarget(target:) zapisuje parametr we właściwości target (użyj self), warmer() zwiększa wartość docelową o 1, a display() zwraca target: 21.
Dostarczony kod odczytuje początkową wartość docelową i listę poleceń (warmer lub set <n>), wykonuje je, a następnie wyświetla display().
Twój kod umieść w pliku Thermostat.swift. Plik main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift