در این جلسه میخواهیم با Observed Properties آشنا شویم که در فریمورک SwiftUI نیز بسیار پر کاربرد است.
میخواهیم به صورت جامع به بررسی مفهوم Observed Properties در Swift بپردازیم. همچنین با استفاده از مثال های کاربردی، نحوه پیادهسازی و استفاده از آنها را بررسی کنیم.
حال نیاز داریم با دو مفهوم بسیار مهم آشنا شویم.
willSet
اولین موردی که نیاز هست با آن آشنا شویم متود willSet
هست که دقیقا قبل تغییر مقدار متغیر فراخوانی میشود. و با توجه به مقدار جدیدی که قرار است در متغیر قرار بگیرد میتوانیم اقدامات لازم را انجام دهیم.
به مثال زیر دقت کنید.
var dollarInToman: Double = 0.0 {
willSet {
print("کد اینجا کمی قبل از تغییر مقدار متغیر اجرا میشود")
}
}
در کد بالا هر موقعی که شما بخواهید مقدار متغیر را تغییر دهید، دقیقا قبل از تغییر مقدار، متود willSet
صدا زده میشود و میتوانید با توجه به نیاز برنامه کار های لازم را انجام دهید.
willSet
استفاده میکنیم.
حال یک مثال کامل تر را بررسی کنیم:
var dollarInToman: Double = 0.0 {
willSet {
if (newValue > dollarInToman) {
print("باز داره گرون میشه دلار")
} else {
print("شتر در خواب بیند پنبه دانه")
}
}
}
در willSet
نام متغیر، یعنی "dollarInToman" به مقدار فعلی متغیر اشاره میکند و "newValue" به مقدار جدیدی که کمی بعد درون متغیر قرار میگیرد اشاره میکند.
به مثال زیر دقت کنید:
var dollarInToman: Double = 0.0 {
willSet {
if (newValue > dollarInToman) {
print("باز داره گرون میشه دلار")
} else {
print("شتر در خواب بیند پنبه دانه")
}
print("قیمت قبلی: \(dollarInToman) و قیمت جدید: \(newValue)")
}
}
dollarInToman = 10
حال خروجی را ببینیم:
باز داره گرون میشه دلار
قیمت قبلی: 0.0 و قیمت جدید: 10.0
didSet
اما اگر نیاز داشتید بعد از تغییر مقدار متغیر کاری انجام دهید، مثل بروزرسانی UI میتوانید در didSet
انجام دهید.
به مثال زیر دقت کنید:
var carSpeed: Double = 0.0 {
didSet {
print("سرعت ماشین تغییر کرده است")
}
}
در مثال بالا بعد از این که مقدار متغیر تغییر کرد didSet
صدا زده میشود
didSet
استفاده میکنیم.
حال بریم سراغ یک مثال کامل تر:
var carSpeed: Double = 0.0 {
didSet {
print("سرعت ماشین تغییر کرده است")
if (carSpeed > oldValue) {
print("سرعت ماشین افزایش داشته")
} else {
print("سرعت ماشین کاهش داشته")
}
}
}
carSpeed = 10
حال خروجی را ببینیم:
سرعت ماشین تغییر کرده است
سرعت ماشین افزایش داشته
دقت کنید که اسم متغیر یعنی "carSpeed" به مقدار جدید متغیر اشاره میکند (چون الان دیگر مقدار متغیر عوض شده است) و "oldValue" به مقدار قبلی متغیر اشاره میکند.
حال یک مثال بزنیم که مقدار سرعت ماشین را چاپ کند:
var carSpeed: Double = 30 {
didSet {
if (carSpeed > oldValue) {
print("سرعت ماشین افزایش داشته")
} else {
print("سرعت ماشین کاهش داشته")
}
print("سرعت قبلی ماشین: \(oldValue) و سرعت حال حاضر: \(carSpeed)")
}
}
carSpeed = 15
حال میخواهیم بریم سراغ یک مثال کامل که ترکیب تمام موارد باشد:
var myWallet: Double = 1000 {
willSet {
if (newValue > myWallet) {
let diff = newValue - myWallet
print("داره \(diff) پول میاد تو حسابت!")
} else {
let diff = myWallet - newValue
print("\(\(diff) پول از حسابت داره کم میشه")
}
}
didSet {
if (myWallet > oldValue) {
print("پول اومد تو حسابت!")
} else {
print("پول از حسابت کم شد!")
}
}
}
myWallet = 1500
myWallet = 1200
خروجیشم ببینید:
داره 500.0 پول میاد تو حسابت!
پول اومد تو حسابت!
300.0 پول از حسابت داره کم میشه
پول از حسابت کم شد
در نتیجه، Observed Properties در Swift یک ابزار قدرتمند برای مشاهده تغییرات در متغیر ها و اجرای کد دلخواه در زمانی که مقادیر تغییر میکنند فراهم می کند. این ویژگی میتواند بهویژه در مدیریت وضعیت و بهروزرسانی رابط کاربری مفید باشد.