Я столкнулся с ситуацией, когда хочу зарегистрировать 2 разных UIViewControllers с одним делегатом, потому что в моем проекте показывается 2 UIViewControllers за раз. Когда я запускаю событие, я хочу, чтобы оба контроллера получили уведомление, но, к сожалению, только один контроллер может получить событие не для обоих.Одиночный делегат с несколькими контроллерами
Вот пример кода:
@objc protocol DownloaderDelegate: class {
func complete()
}
class Downloader {
static let sharedInstance = Downloader()
weak var delegate: DownloaderDelegate?
private init() {
}
func downloadFile() {
self.delegate!.complete()
}
}
Я затем использовать его, как это в обоих UIViewControllers:
override viewDidLoad() {
super.viewDidLoad()
Downloader.sharedInstance.delegate = self
}
Любая идея, как сделать оба контроллера просмотра для прослушивания события из одного делегата ?
Спасибо за предложение. Как насчет использования «обратных вызовов»? Потому что эта NSNotification также требует особой заботы об удалении наблюдателя. – codelearner
«обратные вызовы» могут быть решением, но я думаю, что он менее прост, чем «NSNotification». При удалении наблюдателей вам просто нужно: 'NSNotificationCenter.defaultCenter(). RemoveObserver (self)' в методе 'deinit'. –
Учитывая, что вы делаете загрузку, уведомления могут быть вашим лучшим вариантом, учитывая, что в какой-то момент вы можете иметь больше вещей, которые захотят узнать о завершении загрузки. – PeejWeej