Metodi e self
Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 3 di 57.
All'interno di un metodo, self è l'istanza su cui è stato chiamato il metodo. self.count e count indicano la stessa proprietà, quindi di solito si omette self:
class Counter {
var count = 0
func increment() {
self.count += 1
}
}
let c = Counter()
c.increment()
print(c.count)Output:
1self è necessario quando un parametro ha lo stesso nome di una proprietà. In questo caso, il nome semplice indica il parametro e self.name indica la proprietà:
class Player {
var name = "unknown"
func rename(name: String) {
self.name = name
}
}
let p = Player()
p.rename(name: "Ada")
print(p.name)Output:
AdaI metodi possono richiamare altri metodi della stessa istanza, il che mantiene ogni metodo piccolo:
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)Risultato:
10Un metodo può anche restituire un valore calcolato a partire dalle proprietà. Qui isEmpty() risponde a una domanda sull'istanza senza modificarla:
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())Output:
true
falseSfida
FacileCompleta la classe Thermostat. setTarget(target:) memorizza il parametro nella proprietà target (usa self), warmer() aumenta il valore target di 1 e display() restituisce target: 21.
Il codice fornito legge un valore target iniziale e un elenco di comandi (warmer o set <n>), li applica e stampa display() al termine.
Il tuo codice va inserito in Thermostat.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
// Codice di input/output fornito: lascialo così com'è
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())
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiMetodi e selfInizializzatoriLe classi sono riferimentiRiepilogo - Tessera della biblioteca4Incapsulamento
Controllo degli accessiSola lettura dall’esternoProteggere lo statoInizializzatori che possono fallireRiepilogo - Conto bancario7Polimorfismo e tipi generici
PolimorfismoCasting dei tipiFunzioni genericheTipi genericiRipasso - Calcolatore di forme2Struct e tipi valore
Le structSemantica dei valoriMetodi mutantiStruct o classeRiepilogo - Articolo di inventario5Ereditarietà
SottoclassiSovrascrivere i metodiInizializzatori e superfinal e gerarchieRiepilogo - Gerarchia dei dipendenti8Protocolli standard
CustomStringConvertibleEquatableComparableHashableRiepilogo - Ordinamento personalizzato11Progetto: Gestione della biblioteca
Libri e utentiPrestito dei libriEsercitati da solo: Playground Swift