Вопрос проверяет знание языка Swift и умение реализовывать поведенческие паттерны без сторонних фреймворков.
Паттерн Observer в Swift можно реализовать с помощью протоколов, замыканий или NotificationCenter. Observable хранит список подписчиков и уведомляет их при изменениях. Observer реализует протокол или передаёт замыкание. Такой подход не требует дополнительных библиотек. Выбор способа зависит от требований к связанности и жизненному циклу.
В Swift есть несколько базовых способов реализовать Observer.
Этот способ максимально приближен к классическому паттерну.
protocol Observer: AnyObject {
func didUpdate(value: Int)
}
Observable хранит слабые ссылки на подписчиков:
class Observable {
private var observers = [Observer]()
func add(observer: Observer) {
observers.append(observer)
}
func notify(value: Int) {
observers.forEach { $0.didUpdate(value: value) }
}
}
Подходит для простых сценариев.
class Observable {
var onChange: ((Int) -> Void)?
func update(value: Int) {
onChange?(value)
}
}
протоколы — для сложных сценариев
замыкания — для простых связей
NotificationCenter — для широковещательных событий
Swift предоставляет гибкие инструменты для реализации Observer без внешних зависимостей. Главное — контролировать жизненный цикл подписчиков.