NotificationCenterを使用して通知を受け取る

あるviewControllerから別のviewControllerに処理をわたすには、NotificationCenterを使用します。

今回はこの実装方法について解説します!

NotificationCenterとは

公式リファレンス一部抜粋

オブジェクトは通知センターに登録され、メソッドを使用して通知(オブジェクト)を受信します。オブジェクトが自分自身をオブザーバーとして追加するとき、受信する通知を指定します。したがって、オブジェクトは、いくつかの異なる通知のオブザーバーとして自分自身を登録するために、このメソッドを数回呼び出す場合があります。

https://developer.apple.com/documentation/foundation/notificationcenter

つまり、発信側のviewControllerの任意のタイミングで通知を発信し、それを受け取り側のviewControllerが通知を受け取り、何らかの処理を行うということらしいです。

実装方法

発信側:通知をpostする

発信側は、通知を渡したいタイミングで以下のように書けば、通知をpostすることができます。

NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reload"), object: nil)

ちなみに直接かくとこのように1行ですが、extensionで持っておいたほうが可読性があがりそうです。

//extension.swift
extension Notification.Name {
    static let reload = Notification.Name("reload")
}

NotificationCenter.default.post(name: .reload, object: nil)

受信側:通知をうけとりメソッドを実行

受信側はviewDidLoadなど必ず通る場所でnotificationCenterを登録しましょう

NotificationCenter.default.addObserver(self, selector: #selector(loadMenu), name: NSNotification.Name(rawValue: "reload"), object: nil)

受け取ったときのメソッドはこのように書きます

@objc private func loadMenu() {
    self.tableView.reloadData()
}

コメント

タイトルとURLをコピーしました