Strukturen
Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 7 von 57.
Eine struct gruppiert Daten und Methoden wie eine Klasse. Swift schreibt für jede struct einen Memberwise-Initializer mit einem Parameter pro Eigenschaft, daher benötigt eine struct kein eigenes init:
struct Point {
var x: Int
var y: Int
func distanceFromOrigin() -> Int {
abs(x) + abs(y)
}
}
let p = Point(x: 3, y: -4)
print(p.x)
print(p.distanceFromOrigin())Ausgabe:
3
7Eigenschaften mit Standardwerten können im Memberwise-Initialisierer weggelassen werden:
struct Settings {
var volume = 5
var muted = false
}
let quiet = Settings(volume: 1)
print(quiet.volume)
print(quiet.muted)Ausgabe:
1
falseEine in einer let-Konstanten gespeicherte Struktur kann überhaupt nicht geändert werden, nicht einmal ihre var-Eigenschaften. Speichere sie in einer var, um sie zu ändern:
let fixed = Point(x: 1, y: 2)
// fixed.x = 5 // Fehler: Zuweisung nicht möglich, fixed ist eine let-Konstante
var moving = Point(x: 1, y: 2)
moving.x = 5 // in OrdnungViele der eigenen Typen von Swift sind Strukturen: Int, Double, String, Array und Dictionary. Deine Strukturen verhalten sich genauso wie diese Typen: Sie sind einfache Werte.
struct Money {
var cents: Int
func formatted() -> String {
"\(cents / 100).\(cents % 100 < 10 ? "0" : "")\(cents % 100)"
}
}
print(Money(cents: 1250).formatted())
print(Money(cents: 305).formatted())Ausgabe:
12.50
3.05Aufgabe
EinfachDefiniere eine Struktur Item mit den Eigenschaften name (String), price (Int, in Cent) und quantity (Int). Füge eine Methode total() hinzu, die den Preis multipliziert mit der Menge zurückgibt, sowie eine Methode line(), die 2 x tea = 350 zurückgibt.
Der bereitgestellte Code liest pro Zeile ein Element im Format name,price,quantity, erstellt jedes Item mit dem Memberwise-Initialisierer und gibt line() aus. Anschließend gibt er sum: und die Summe aller Gesamtwerte aus.
Dein Code gehört in Item.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
// Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
var sum = 0
for row in input {
let p = row.split(separator: ",").map(String.init)
let item = Item(name: p[0], price: Int(p[1])!, quantity: Int(p[2])!)
print(item.line())
sum += item.total()
}
print("sum: \(sum)")
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 ausleihenÜbe selbstständig: Swift-Playground