Inicjalizatory
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 4 z 57.
Inicjalizator, zapisywany jako init, uruchamia się podczas tworzenia instancji i przypisuje właściwościom wartości początkowe. Jego parametry stają się argumentami wywołania typu:
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)Wynik:
Dune
412Każda właściwość musi mieć wartość, zanim będzie można użyć instancji. Właściwość bez wartości domyślnej musi zostać ustawiona w init, w przeciwnym razie klasa się nie skompiluje. Właściwość zadeklarowaną za pomocą let można ustawić raz w init i nigdy więcej jej nie zmieniać:
class Book {
let isbn: String // ustawiane tylko raz, w init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Parametry init mogą mieć wartości domyślne, więc wywołujący podają tylko te, które się różnią:
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)")Wynik:
egg 300
timer 30Klasa może mieć więcej niż jeden inicjalizator, każdy z innymi parametrami. convenience init uzupełnia niektóre wartości i wywołuje główny inicjalizator za pomocą 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)Wynik:
20.0
100.0Wyzwanie
ŁatwyNapisz inicjalizator klasy Account. Przyjmuje owner i opcjonalne balance, którego domyślną wartością jest 0, i zapisuje obie wartości. Następnie uzupełnij summary(), która zwraca Ada has 150.
Dostarczony kod odczytuje właściciela, a gdy dostępny jest drugi wiersz, także początkowe saldo. Tworzy konto z saldem lub bez niego i wyświetla summary().
Twój kod umieść w pliku Account.swift. Plik main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift