Menu
Coddy logo textTech

Berechnete Eigenschaften

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

Eine gespeicherte Eigenschaft enthält einen Wert. Eine berechnete Eigenschaft verfügt über keinen Speicherplatz: Bei jedem Lesen führt sie Code aus und gibt einen aus anderen Eigenschaften berechneten Wert zurück:

struct Rectangle {
    var width: Double
    var height: Double

    var area: Double {
        width * height
    }
}

var r = Rectangle(width: 3, height: 4)
print(r.area)
r.width = 10
print(r.area)

Ausgabe:

12.0
40.0

Da der Wert bei jedem Lesen neu berechnet wird, kann eine berechnete Eigenschaft niemals veraltet sein. Sie wird wie eine gespeicherte Eigenschaft gelesen, ohne Klammern:

struct Person {
    var first: String
    var last: String

    var fullName: String {
        "\(first) \(last)"
    }
}

var p = Person(first: "Ada", last: "Byron")
p.last = "Lovelace"
print(p.fullName)

Ausgabe:

Ada Lovelace

Eine berechnete Eigenschaft kann auch einen Setter haben. set empfängt den neuen Wert als newValue und aktualisiert die gespeicherten Eigenschaften, auf denen sie basiert:

struct Temperature {
    var celsius: Double

    var fahrenheit: Double {
        get { celsius * 9 / 5 + 32 }
        set { celsius = (newValue - 32) * 5 / 9 }
    }
}

var t = Temperature(celsius: 100)
print(t.fahrenheit)
t.fahrenheit = 32
print(t.celsius)

Ausgabe:

212.0
0.0

Verwende eine berechnete Eigenschaft für einen Wert, der sich aus anderen Werten ergibt und kostengünstig zu berechnen ist. Verwende eine Methode, wenn die Arbeit Argumente entgegennimmt oder aufwendig ist:

struct Order {
    var items: [Int]
    var total: Int { items.reduce(0, +) }           // Eigenschaft: keine Argumente
    func total(withTax rate: Int) -> Int {           // Methode: nimmt ein Argument
        total + total * rate / 100
    }
}
challenge icon

Aufgabe

Einfach

Vervollständige die Struktur Circle mit einer gespeicherten Eigenschaft radius und drei schreibgeschützten berechneten Eigenschaften: diameter (das Doppelte des Radius), area (π r² unter Verwendung von Double.pi) und label, die r=2.0 d=4.0 a=12.57 zurückgibt, wobei die Fläche mithilfe von String(format: "%.2f", area) auf zwei Dezimalstellen gerundet wird.

Der bereitgestellte Code liest pro Zeile einen Radius ein, erstellt einen Circle und gibt label aus. Anschließend verdoppelt er den Radius des letzten Kreises und gibt dessen label erneut aus, daher müssen die Werte dem Radius folgen.

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

Probier es selbst

import Foundation

// Mitgelieferter Ein-/Ausgabecode: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
var last = Circle(radius: 0)
for line in input {
    last = Circle(radius: Double(line)!)
    print(last.label)
}
last.radius *= 2
print(last.label)
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