ある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()
}
コメント