Menu
Coddy logo textTech

Statische Member

Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 14 von 57.

Eine static-Eigenschaft gehört zum Typ selbst, nicht zu einer Instanz. Es gibt genau eine Kopie, auf die über den Typnamen zugegriffen wird:

struct Temperature {
    static let freezing = 0.0
    static let boiling = 100.0
    var celsius: Double
}

print(Temperature.boiling - Temperature.freezing)

Ausgabe:

100.0

Eine static var kann sich ändern, wodurch sie für Daten nützlich ist, die von allen Instanzen gemeinsam genutzt werden, z. B. ein Zähler dafür, wie viele erstellt wurden:

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)

Ausgabe:

1
2
2

Eine static func wird auf dem Typ aufgerufen. Sie hat keine self-Instanz, mit der sie arbeiten kann, und verwendet daher nur ihre Argumente und andere statische Member. Sie eignet sich gut für Hilfsfunktionen und benannte Möglichkeiten zum Erstellen von Instanzen:

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)

Ausgabe:

384

Innerhalb des Typs ist Self eine andere Möglichkeit, den Typ zu benennen, sodass statische Member als Self.issued geschrieben werden können. Instanzmethoden können statische Member lesen, aber eine statische Methode kann nicht auf Instanzeigenschaften zugreifen, da sie nicht für eine Instanz aufgerufen wird.

struct Level {
    static let maximum = 10
    var current = 1
    func isMax() -> Bool { current == Self.maximum }   // Instanz liest static
    static func describe() -> String { "levels 1-\(maximum)" } // static liest static
}
challenge icon

Aufgabe

Einfach

Vervollständige die Klasse Order. Eine statische Eigenschaft nextId beginnt bei 1, und jede neue Bestellung verwendet den aktuellen Wert von nextId als ihre id und erhöht ihn. Eine statische Konstante taxPercent ist 10. Die Instanzmethode total() gibt die Zwischensumme zuzüglich der Steuer (abgerundet) zurück, und die statische Methode summary(of:) erhält ein Array von Bestellungen und gibt 3 orders, 660 total zurück.

Der bereitgestellte Code liest pro Zeile eine Zwischensumme ein, erstellt für jede eine Bestellung, gibt für jede Bestellung #1: 110 aus und gibt schließlich die Zusammenfassung aus.

Dein Code gehört in Order.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Swift-Playground