Observed Properties چیست؟

زمان مطالعه : ۴ دقیقه
آخرین بروزرسانی : ۱۹ دی ۱۴۰۳
Observed Properties چیست؟

در این جلسه میخواهیم با Observed Properties آشنا شویم که در فریمورک SwiftUI نیز بسیار پر کاربرد است.

میخواهیم به صورت جامع به بررسی مفهوم Observed Properties در Swift بپردازیم. همچنین با استفاده از مثال‌ های کاربردی، نحوه پیاده‌سازی و استفاده از آن‌ها را بررسی کنیم.

مفهوم Observed Properties

Observed Properties به شما این امکان را می ‌دهند که تغییرات مقادیر متغیر ها را پیگیری کرده و بر اساس این تغییرات، اقدامات مناسبی را انجام دهید. این ویژگی به خصوص در زمانی که نیاز دارید تا رابط کاربری خود را بر اساس تغییرات داده ‌ها به‌روزرسانی کنید، کاربردی است.

حال نیاز داریم با دو مفهوم بسیار مهم آشنا شویم.

1- 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

2- 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 یک ابزار قدرتمند برای مشاهده تغییرات در متغیر ها و اجرای کد دلخواه در زمانی که مقادیر تغییر می‌کنند فراهم می‌ کند. این ویژگی می‌تواند به‌ویژه در مدیریت وضعیت و به‌روزرسانی رابط کاربری مفید باشد.

میلاد خط شب
میلاد خط شب
معتقدم هر آدمی میتواند در یک زمینه ای مفید و تاثیر گذار باشد و اصولا آدم "غیر مفید" نداریم. فقط کافی است به موقع و صحیح راهنمایی شود.
پاسخ دهید