Наблюдатель свойств Swift - пример использования didset vs willset - PullRequest
0 голосов
/ 24 апреля 2018

Мне знакомо значение свойства обозревателя и как его использовать. Однако, что я действительно не понимаю, так это когда использовать каждый из них. Мне кажется, что это не имеет значения .. Если я использую didset, я могу использовать oldValue или новое значение, используя само свойство ... и если я использую willset, я могу использовать newValue или старое значение, используя само свойство. Итак ... oldValue в didset это как само свойство в willset, а newValue в willSet это как само свойство в didset:

var propObserve = 1 {
    willSet {
       print("my previous value was \(propObserve) and my future value will be \(newValue)")
    }

    didSet {
       print("my previous value was \(oldValue) and my future value will be \(propObserve)")
    }
}

propObserve = 2

Я получу одинаковый отпечаток с каждого из них. Я понимаю, что willSet выполняется раньше, а didSet выполняется после установки свойства с новым значением, но, тем не менее, я могу использовать новые и старые значения в обоих случаях (в willSet, а также в didSet)

Q1: Когда предпочтительнее использовать один над другим? Q2: Можете ли вы дать мне конкретный пример такого использования?

Заранее спасибо

1 Ответ

0 голосов
/ 24 апреля 2018

Существует много вариантов использования для каждого, но вот пара примеров.

Используйте willSet, чтобы выполнить проверку нового значения, ограничить его определенным числовым диапазоном, округлить илисохранить его в историю предыдущих значений.Использование willSet дает программисту возможность изменять значение перед присваиванием.

Используйте didSet для выполнения любого действия после изменения значения, такого как обновление пользовательского интерфейса, перезагрузка табличного представления, запись чего-либо вAPI, или изменение другого связанного значения.Использование didSet присваивает значение и позволяет выполнять действия на основе этого присваивания.

В некоторых других случаях использования будет достаточно любого из них.

...