平々凡々エンジニア

平凡で難しい悩みを解決

swift NotificationCenter

ほかのコントローラーに何かの処理をお願いしたくなるときがあります。

その場合は二つの方法で実現可能です。

1.delegateを使用する

2.NotificationCenterを使用する

delegateのほうはかなり読みにくいのでおすすめできません。

それに比べNotificationCenterは読みやすいのでおすすめできます。

どちらも同じ考え、同じような動作なので後者を学ぶほうがよいと思いました。

ちなみにオブザーバーパターンと呼ばれるものらしいです。

NotificationCenterは、異なるViewController間のイベント通知を実現します。 また発信側と受信側が存在します。

通知名前空間の拡張

以下のように拡張します。 特にどのファイルに記載しないといけないとかはないです。

extension Notification.Name {
    static let notifyName = Notification.Name("notifyName")
}

通知送り先

// 通知を送りたい箇所
NotificationCenter.default.post(name: .notifyName, object: nil)

通知を受け取りたい側

override func viewDidLoad() {
    super.viewDidLoad()
    /// NotificationCenterを登録
    NotificationCenter.default.addObserver(self, selector: #selector(doSomething(notification:)), name: .notifyName, object: nil)
}

このように記載するだけで notifyName通知が発行されたタイミングで、doSomething()が実行されるようになります。

参考資料

qiita.com