Menu
Coddy logo textTech

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.0

Zmienna 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
2

Metoda 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:

384

Wewną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ą
}
challenge icon

Wyzwanie

Łatwy

Uzupeł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))
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Edytor online Swift