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.0Eine 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
2Eine 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:
384Innerhalb 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
}Aufgabe
EinfachVervollstä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))
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenMethoden und selfInitialisiererKlassen sind ReferenzenRückblick – Bibliotheksausweis4Kapselung
ZugriffskontrolleVon außen schreibgeschütztZustand schützenFehlschlagende InitialisiererRückblick – Bankkonto7Polymorphismus und Generika
PolymorphismusTypumwandlungGenerische FunktionenGenerische TypenZusammenfassung – Shape-Rechner2Strukturen und Werttypen
StrukturenWertsemantikVerändernde MethodenStruktur oder KlasseZusammenfassung – Inventarelement5Vererbung
UnterklassenMethoden überschreibenInitialisierer und superfinal und HierarchienRückblick – Mitarbeiterhierarchie8Standardprotokolle
CustomStringConvertibleEquatableComparableHashableRückblick – Benutzerdefiniertes Sortieren11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihen3Eigenschaften im Detail
Berechnete EigenschaftenEigenschaftsbeobachterStatische MemberEnums mit MethodenRückblick – TemperaturprotokollÜbe selbstständig: Swift-Playground