Menu
Coddy logo textTech

Inizializzatori

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

Un inizializzatore, scritto init, viene eseguito quando viene creata un’istanza e assegna i valori iniziali alle proprietà. I suoi parametri diventano gli argomenti della chiamata al tipo:

class Book {
    var title: String
    var pages: Int

    init(title: String, pages: Int) {
        self.title = title
        self.pages = pages
    }
}

let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)

Output:

Dune
412

Ogni proprietà deve avere un valore prima che l’istanza possa essere utilizzata. Una proprietà senza un valore predefinito deve essere impostata in init, altrimenti la classe non viene compilata. Una proprietà dichiarata con let può essere impostata una sola volta in init e non può più essere modificata in seguito:

class Book {
    let isbn: String     // impostato una sola volta, in init
    var title: String

    init(isbn: String, title: String) {
        self.isbn = isbn
        self.title = title
    }
}

I parametri di init possono avere valori predefiniti, così chi effettua la chiamata specifica solo ciò che è diverso:

class Timer {
    var seconds: Int
    var label: String

    init(seconds: Int, label: String = "timer") {
        self.seconds = seconds
        self.label = label
    }
}

let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")

Output:

egg 300
timer 30

Una classe può avere più di un inizializzatore, ciascuno con parametri diversi. Un convenience init specifica alcuni valori e chiama quello principale con self.init(...):

class Temperature {
    var celsius: Double

    init(celsius: Double) {
        self.celsius = celsius
    }

    convenience init(fahrenheit: Double) {
        self.init(celsius: (fahrenheit - 32) * 5 / 9)
    }
}

print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)

Output:

20.0
100.0
challenge icon

Sfida

Facile

Scrivi l'inizializzatore della classe Account. Accetta owner e un balance opzionale, il cui valore predefinito è 0, e li memorizza entrambi. Poi completa summary(), che restituisce Ada has 150.

Il codice fornito legge un proprietario e, quando è presente una seconda riga, un saldo iniziale. Crea il conto con o senza il saldo e stampa summary().

Il tuo codice va in Account.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 account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
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