Initializer
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 4 dari 57.
Initializer, yang ditulis init, berjalan saat sebuah instance dibuat dan memberikan nilai awal pada property. Parameternya menjadi argumen saat memanggil tipe tersebut:
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
412Setiap property memerlukan nilai sebelum instance dapat digunakan. Property tanpa nilai default harus diatur di init, atau class tidak dapat dikompilasi. Property yang dideklarasikan dengan let dapat diatur sekali di init dan tidak diubah setelahnya:
class Book {
let isbn: String // tetapkan sekali, di init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Parameter init bisa memiliki nilai default, jadi pemanggil hanya perlu memberikan nilai yang berbeda:
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 30Sebuah class dapat memiliki lebih dari satu initializer, masing-masing dengan parameter yang berbeda. convenience init mengisi beberapa nilai dan memanggil initializer utama dengan 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.0Tantangan
MudahTulis initializer untuk class Account. Initializer ini menerima owner dan balance opsional yang nilai default-nya 0, lalu menyimpan keduanya. Kemudian lengkapi summary(), yang mengembalikan Ada has 150.
Kode yang disediakan membaca owner dan, jika ada baris kedua, saldo awal. Kode tersebut membuat account dengan atau tanpa saldo, lalu mencetak summary().
Tulis kodemu di Account.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
// Kode input/output yang disediakan: biarkan apa adanya
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())
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Swift