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:
1self 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:
AdaMethoden 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:
10Eine 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
falseAufgabe
EinfachVervollstä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())
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