Наблюдатели свойств в Swift: willSet и didSet

Наблюдали свойств — очень важная вещь в разработке программ под iOS.  Их очень часто применяют на практике, поэтому советую хорошо разобраться в этом вопросе. Я приведу примеры установки свойств, с минимумом комментариев, однако, если потребуется дополнительное пояснение — я с удовольствием это сделаю. Пишите в комментариях свои вопросы.

Итак мы можем отслеживать любые изменения значений свойств при помощи наблюдателей willSet{} и didSet {}.

//
// proSwift.ru
//

var someStoredProperty: String = "Type you text here"{
    willSet {newValue - имя переменной, которую Swift создал для нас, в которой хранится значение, которое будет установлено}
    didSet {oldValue - имя переменной, которую Swift создал для нас, в которой хранится значение, которое было установлено до замены}
}

 

Наблюдатели свойств willSet  и didSet вызываются тогда, когда кто-то устанавливает это свойство. Наблюдатель willSet вызывается непосредственно перед тем, как свойство будет установлено, и внутри наблюдателя можно использовать специальную переменную с именем newValue. Наблюдатель didSet вызывается сразу после получения свойством значения, и внутри можно использовать специальную переменную с именем oldValue.

Наблюдатели также могут быть установлены и на наследуемые свойства. В этом случае выполняются все наблюдатели: и унаследованного свойства и у свойства super-класса. Это очень удобно в случае, если вы не хотите менять свойств super-класса напрямую, но хотите знать когда они меняются.

//
// proSwift.ru
//

override var inheritedProperty {
    willSet {newValue - имя переменной, которую Swift создал для нас, в которой хранится значение, которое будет установлено}
    didSet {oldValue - имя переменной, которую Swift создал для нас, в которой хранится значение, которое было установлено до замены}
}

Наиболее частое использование наблюдателей — это адаптирование пользовательского интерфейса, при изменении каких либо параметров.

1 Comment on “Наблюдатели свойств в Swift: willSet и didSet

Добавить комментарий для Павел Отменить ответ

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.