Menu
Coddy logo textTech

Methoden und self

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

Innerhalb einer Methode ist self die Instanz, für die die Methode aufgerufen wurde. self.count und count bezeichnen dieselbe Eigenschaft, daher wird self normalerweise weggelassen:

class Counter {
    var count = 0
    func increment() {
        self.count += 1
    }
}

let c = Counter()
c.increment()
print(c.count)

Ausgabe:

1

self wird benötigt, wenn ein Parameter denselben Namen wie eine Eigenschaft hat. Dann bezeichnet der einfache Name den Parameter und self.name die Eigenschaft:

class Player {
    var name = "unknown"
    func rename(name: String) {
        self.name = name
    }
}

let p = Player()
p.rename(name: "Ada")
print(p.name)

Ausgabe:

Ada

Methoden können andere Methoden derselben Instanz aufrufen, wodurch jede Methode klein bleibt:

class Cart {
    var total = 0
    func add(_ price: Int) {
        total += price
    }
    func addTwice(_ price: Int) {
        add(price)
        add(price)
    }
}

let cart = Cart()
cart.addTwice(5)
print(cart.total)

Ausgabe:

10

Eine Methode kann auch einen Wert zurückgeben, der aus den Eigenschaften berechnet wird. Hier beantwortet isEmpty() eine Frage zur Instanz, ohne sie zu verändern:

class Cart {
    var items: [String] = []
    func add(_ item: String) {
        items.append(item)
    }
    func isEmpty() -> Bool {
        items.count == 0
    }
}

let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())

Ausgabe:

true
false
challenge icon

Aufgabe

Einfach

Vervollständige die Klasse Thermostat. setTarget(target:) speichert den Parameter in der Eigenschaft target (verwende self), warmer() erhöht das Ziel um 1, und display() gibt target: 21 zurück.

Der bereitgestellte Code liest ein Startziel und eine Liste von Befehlen (warmer oder set <n>), wendet sie an und gibt am Ende display() aus.

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

Probier es selbst

// Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
    if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
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