Menu
Coddy logo textTech

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
7

Eigenschaften 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
false

Eine 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 Ordnung

Viele 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.05
challenge icon

Aufgabe

Einfach

Definiere 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)")
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