Вопрос проверяет знание UIKit API и умение распознавать паттерн Observer в стандартных механизмах iOS.
В UIKit паттерн Observer используется очень часто. Самые известные примеры — NotificationCenter, target–action, delegate и KVO. Во всех этих случаях один объект уведомляет другие об изменениях или событиях. Подписчики реагируют на события, не зная внутренней реализации источника. Это снижает связанность компонентов.
UIKit активно использует паттерн Observer в разных формах.
Один из самых очевидных примеров широковещательного Observer.
NotificationCenter.default.addObserver(
self,
selector: #selector(handle),
name: UIApplication.didEnterBackgroundNotification,
object: nil
)
источник не знает подписчиков
события рассылаются многим объектам
Используется в UIControl.
button.addTarget(self, action: #selector(tap), for: .touchUpInside)
UIControl — Observable
объект-обработчик — Observer
Delegate — это частный случай Observer с одним подписчиком.
UITableViewDelegate
UIScrollViewDelegate
Позволяет наблюдать за изменениями свойств.
используется реже
требует аккуратной работы с жизненным циклом
UIKit неявно обучает работе с Observer. Понимание этих примеров помогает лучше проектировать собственные событийные механизмы.