Property Observer dalam Swift
Dalam artikel Property Observer dalam Swift
ini Kamu akan memecahkan masalah “Bagaimana cara menambahkan observer/pelacak pada properti?”. Misalnya kita ingin melacak kapan properti tersebut dimutasi atau apapun yang terjadi pada properti tersebut.
willSet dan didSet
willSet
dipanggil sebelum nilai diset.didSet
dipanggil setelah nilai baru diset ke properti.
Sekarang kita mulai dengan beberapa contoh implementasinya. Silahkan buka Playground Kamu.
Pelacak Level
var myLevel: Int = 80 { willSet(newLevel) { print("About to change your level to \(newLevel)") } didSet { print("Your level has been changed") print("you had \(oldValue) previously. Now you have \(myLevel)") } }
Sekarang kita ubah myGrade
.
myLevel = 100 // "About to change your level to 100" // "Your level has been changed" // "You had 80 previously. Now you have 100"
Blok willSet
dipanggil sebelum myGrade
diset ke 100.
Blok didSet
berjalan setelahnya. oldValue
mengacu pada nilai awal.
Penghitung Langkah
Buat variabel totalSteps
. Ketika variabel mendapatkan nilai baru, Kamu dapat memberi tahu user bahwa nilainya telah diubah.
var totalSteps: Int = 20 { willSet(newTotalSteps) { print("About to set totalSteps to \(newTotalSteps)") } didSet { if totalSteps > oldValue { print("Added \(totalSteps - oldValue) steps") } } }
totalSteps = 60 // "About to set totalSteps to 60" // "Added 20 steps"
Aplikasi
Kamu dapat memberi tahu user atau mengubah warna background setelah user berhasil masuk ke aplikasi.
var userLoginInfo: Bool = false { willSet(newValue) { print("The user has tried something") } didSet { if userLoginInfo { print("The user has switched from \(oldValue) to \(userLoginInfo)") // Backgroud color // Animation // Pop Up // All kinds of stuff } } } userLoginInfo = true // The user has tried something // The user has switched from false to true userLoginInfo = true // The user has tried something // The user has switched from true to true
Computed Property memiliki kemiripan dengan Computed Property yaitu selalu mengkalkulasi meskipun nilai yang ditetapkan tidak berubah. Kemudian perbedaannya adalah willSet
dan didSet
tidak akan dipanggil ketika Kamu menginisialisasi properti tersebut.
So… Tujuan menggunakan property obeserver
tidak hanya untuk menulis lebih sedikit kode tetapi juga untuk memberikan kode yang lebih readable melalui kata kunci yang berbeda. Kamu tidak lagi harus membuat fungsi yang tidak perlu diisi dengan switch
atau pernyataan else-if
lainnya yang tidak dibutuhkan.
Semoga bermanfaat.