Pertanyaan
Dokumen Apple menetapkan bahwa:
pengamat willSet dan didSet tidak dipanggil saat properti pertama kali diinisialisasi. Mereka hanya dipanggil ketika nilai properti diatur di luar konteks inisialisasi.
Apakah mungkin untuk memaksa ini dipanggil saat inisialisasi?
Mengapa?
Katakanlah saya memiliki kelas ini
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
Saya menciptakan metode doStuff
, untuk membuat panggilan pemrosesan lebih ringkas, tetapi saya lebih suka hanya memproses properti dalam didSet
fungsi. Apakah ada cara untuk memaksa panggilan ini saat inisialisasi?
Memperbarui
Saya memutuskan untuk hanya menghapus intializer kenyamanan untuk kelas saya dan memaksa Anda untuk mengatur properti setelah inisialisasi. Ini memungkinkan saya untuk tahu didSet
akan selalu dipanggil. Saya belum memutuskan apakah ini secara keseluruhan lebih baik, tapi itu cocok dengan situasi saya dengan baik.
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }