私のプロジェクトは2度のUIViewControllersを一度に表示しているので、1つのデリゲートで2つの異なるUIViewControllerを登録したいという状況に遭遇しました。イベントをトリガーすると、両方のコントローラーに通知する必要がありますが、どちらのコントローラーしか両方のイベントを受信することはできません。ここで複数のコントローラを持つ単一のデリゲート
はサンプルコードです:
@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
}
ビューコントローラの両方を単一のデリゲートからのイベントに耳を傾けるようにする方法任意のアイデア?
提案していただきありがとうございます。 'callbacks'を使うのはどうですか?このNSNotificationはまた、観察者を取り除く特別な注意を必要とするため。 – codelearner
'callbacks'は解決策かもしれませんが、' NSNotification'より単純ではないと思います。オブザーバーを削除するには、 'deinit'メソッドで NSNotificationCenter.defaultCenter()。removeObserver(self)'を実行するだけです。 –
あなたはダウンロードを行っているように見えることを考慮すると、ダウンロードの完了を知りたいと思うことがあるかもしれないと考えている場合、通知があなたの最善の選択肢かもしれません。 – PeejWeej