Menu
Coddy logo textTech

Le classi sono riferimenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 5 di 57.

Una classe è un tipo di riferimento: una variabile contiene un riferimento all’oggetto, non una sua copia. Assegnare un’istanza a un’altra variabile dà un secondo nome allo stesso oggetto:

class Wallet {
    var coins = 10
}

let mine = Wallet()
let alias = mine
alias.coins = 25
print(mine.coins)

Output:

25

=== verifica se due riferimenti puntano alla stessa istanza. Due istanze separate sono oggetti diversi anche quando tutte le loro proprietà corrispondono:

class Wallet {
    var coins = 10
}

let a = Wallet()
let b = a
let c = Wallet()
print(a === b)
print(a === c)

Output:

true
false

Una funzione che riceve un'istanza opera sull'oggetto del chiamante, quindi le modifiche apportate all'interno della funzione restano visibili in seguito:

class Wallet {
    var coins = 10
}

func payFee(_ wallet: Wallet) {
    wallet.coins -= 3
}

let w = Wallet()
payFee(w)
payFee(w)
print(w.coins)

Output:

4

let fissa il riferimento, non l’oggetto. Una costante che contiene un’istanza di classe non può puntare a un’altra istanza, ma le proprietà var dell’istanza possono comunque cambiare. Anche gli array di istanze contengono riferimenti:

class Wallet {
    var coins = 10
}

let shared = Wallet()
let team = [shared, shared]
team[0].coins = 99
print(shared.coins)
print(team[1].coins)

Output:

99
99
challenge icon

Sfida

Facile

Una squadra condivide un unico Budget. Completa spend(_:amount:), una funzione che prende un budget e sottrae l'importo solo se ne rimane abbastanza, restituendo true quando la spesa è stata autorizzata. Poi completa runTeam(start:purchases:): crea un unico budget, fai in modo che ogni acquisto venga sottratto da quel medesimo budget e restituisci una riga per acquisto (ok 30 oppure denied 80), seguita da left 20.

Il codice fornito legge il budget iniziale e gli acquisti da una riga separata da virgole e stampa ogni riga restituita.

Il tuo codice va inserito in Budget.swift e Functions.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

// Código de entrada/salida proporcionado: déjalo tal como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let purchases = input[1].split(separator: ",").map { Int($0)! }
for line in runTeam(start: Int(input[0])!, purchases: purchases) { print(line) }
quiz iconMettiti alla prova

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

Esercitati da solo: Playground Swift