NotificationCenter
概要
利用する
登録する
Swift では、通知の名前は NSNotification.Name のネスト型で定義されている。実際には String。obj には notification の送信元のオブジェクトを設定する。設定すると、設定したオブジェクトからの通知のみが届くようになる。nil にすると全ての通知が届く。 code:swift
func addObserver(forName name: NSNotification.Name?,
object obj: Any?,
queue: OperationQueue?,
using block: @escaping (Notification) -> Void) -> NSObjectProtocol
func removeObserver(_ observer: Any,
name aName: NSNotification.Name?,
object anObject: Any?)
code:swift
// selector を使う
center.addObserver(self,
name: .UIApplicationDidBecomeActive,
object: nil)
// クロージャを使う
center.addObserver(forName: .UIApplicationDidBecomeActive,
object: nil,
queue: nil) { _ in print("called") }
自身で通知名を定義する場合は以下のようにする。
code:swift
extension Notification.Name {
static let myNotification = Notification.Name("myNotification")
}
center.addObserver(self,
name: .myNotification,
object: nil)
// struct を使うことで名前空間をきる事ができる
extension Notification.Name {
struct Qiita {
static let myNotification = Notification.Name("qiita.myNotification")
}
}
通知する
code:swift
// 全てに通知
func post(_ notification: Notification)
// 特定の通知
// Object が Notification として通知される?
func post(name aName: NSNotification.Name,
object anObject: Any?,
参考