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
412Ogni 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 30Una 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.0Sfida
FacileScrivi 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())
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