Elementy statyczne
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 14 z 57.
Właściwość static należy do samego typu, a nie do żadnej instancji. Istnieje tylko jedna jej kopia, dostępna za pomocą nazwy typu:
struct Temperature {
static let freezing = 0.0
static let boiling = 100.0
var celsius: Double
}
print(Temperature.boiling - Temperature.freezing)Wynik:
100.0Zmienna static var może się zmieniać, dzięki czemu przydaje się do przechowywania danych wspólnych dla wszystkich instancji, takich jak licznik utworzonych instancji:
class Ticket {
static var issued = 0
let number: Int
init() {
Ticket.issued += 1
number = Ticket.issued
}
}
let a = Ticket()
let b = Ticket()
print(a.number)
print(b.number)
print(Ticket.issued)Wynik:
1
2
2Metoda static func jest wywoływana na typie. Nie ma instancji self, z którą mogłaby pracować, więc korzysta tylko ze swoich argumentów i innych składowych statycznych. To dobre miejsce na funkcje pomocnicze i nazwane sposoby tworzenia instancji:
struct Color {
var red: Int
var green: Int
var blue: Int
static func gray(_ level: Int) -> Color {
Color(red: level, green: level, blue: level)
}
}
let c = Color.gray(128)
print(c.red + c.green + c.blue)Wynik:
384Wewnątrz typu Self to inny sposób na nazwanie typu, dlatego składowe statyczne można zapisywać jako Self.issued. Metody instancji mogą odczytywać składowe statyczne, ale metoda statyczna nie może odczytywać właściwości instancji, ponieważ nie jest wywoływana na instancji.
struct Level {
static let maximum = 10
var current = 1
func isMax() -> Bool { current == Self.maximum } // instancja odczytuje właściwość statyczną
static func describe() -> String { "levels 1-\(maximum)" } // metoda statyczna odczytuje właściwość statyczną
}Wyzwanie
ŁatwyUzupełnij klasę Order. Właściwość statyczna nextId zaczyna od 1, a każde nowe zamówienie przyjmuje bieżącą wartość nextId jako swoje id i ją zwiększa. Stała statyczna taxPercent wynosi 10. Metoda instancji total() zwraca sumę kwoty częściowej i podatku (zaokrągloną w dół), a metoda statyczna summary(of:) otrzymuje tablicę zamówień i zwraca 3 orders, 660 total.
Dostarczony kod odczytuje kwotę częściową z każdego wiersza, tworzy dla każdej z nich zamówienie, wypisuje #1: 110 dla każdego zamówienia, a na końcu wypisuje podsumowanie.
Twój kod umieść w pliku Order.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) }
var orders: [Order] = []
for line in input {
let order = Order(subtotal: Int(line)!)
orders.append(order)
print("#\(order.id): \(order.total())")
}
print(Order.summary(of: orders))
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ążek3Właściwości w szczegółach
Właściwości obliczaneObserwatory właściwościElementy statyczneTypy wyliczeniowe z metodamiPodsumowanie – rejestr temperaturyPoćwicz samodzielnie: Edytor online Swift