Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Просто ViewController это все таки V в MVC.
MVC = Massive View Controller
При необходимости оповестить слушателей (targets) мы сначала проверяем существование этого target, затем либо удаляем его из списка, либо дергаем callback.
objc_sync_enter(self.targets)
self.targets.removeAtIndex(index)
objc_sync_exit(self.targets)
Вы не можете проверить существование target либо другого объекта, так как при обращении к объекту, который освобожден из памяти, мы получим крэш. Это, если я правильно понял смысл слова «проверяем существование target».
class SimpleDynamic<T> {
private weak var target: AnyObject?
private var listener: T -> Void
init(value: T, target: AnyObject, listener: T -> Void) {
self.value = value
self.target = target
self.listener = listener
}
var value: T {
didSet {
if target != nil {
listener(value)
}
}
}
}
Но наличие методов unBind и removeListener я бы все же оставил, так как иногда действительно нужно отписаться где-то в середине жизненного цикла подписчика.
Биндинги в Swift. Делаем первые шаги к MVVM