文書   >   Foundation   >   Notifications   >   NotificationCenter   >   addObserver(forName:object:queue:using:)
インスタンスメソッド
addObserver(forName:object:queue:using:)
通知キューを含む通知センターの急送テーブルに、エントリを追加し、通知キューにブロックを追加し、また optional の通知名と送信者を含みます。
宣言
func addObserver(forName name: NSNotification.Name?, object obj: Any?, queue: OperationQueue?, using block: @escaping (Notification) -> Void) -> NSObjectProtocol
パラメータ
name | 監視者を登録するための通知の名前。つまり、この名前の通知のみが操作キューにブロックを追加するために使用されます。 nil を渡すと、通知センターは通知の名前を使用してブロックを操作キューに追加するかどうかを決定しません。 | |
obj | 監視者が受信したいオブジェクトの通知。つまり、この送信者によって送信された通知のみが監視者に配信されます。 nil を渡すと、通知センターは通知の送信者を使用して監視者に配信するかどうかを決定しません。 | |
queue | block を追加すべき操作キュー。 nil を渡すと、ブロックは通知スレッド上で同期して実行されます。 | |
block | 通知を受け取ったときに実行されるブロック。 ブロックは、監視者登録が削除されるまで、通知センターおよび (コピー) によってコピーされます。 ブロックには 1 つの引数があります: | |
notification | 通知。 |
戻り値
監視者として機能する opaque (不透明な) オブジェクト。
議論
指定された通知が 2 つ以上の監視者ブロックをトリガする場合、ブロックはすべて互いに (ただしそれらの指定されたキューまたは現在のスレッド上で) 同時に実行されることがあります。
以下の例は、ロケール変更通知を受信するために登録する方法を示しています。
let center = NSNotificationCenter.defaultCenter() let mainQueue = NSOperationQueue.mainQueue() self.localeChangeObserver = center.addObserverForName(NSCurrentLocaleDidChangeNotification, object: nil, queue: mainQueue) { (note) in print("The user's locale changed to: \(NSLocale.currentLocale().localeIdentifier)") }
監視の登録を解除するには、このメソッドによって返されたオブジェクトを removeObserver(_:) に渡します。 addObserver(forName:object:queue:using:) で指定されたオブジェクトが全て割り当て解除される前に、 removeObserver(_:) または removeObserver(_:name:object:) を呼び出さなければなりません。
let center = NSNotificationCenter.defaultCenter() center.removeObserver(self.localeChangeObserver)
別の一般的なパターンは、以下の例のように、監視ブロック内から監視者を削除して 1 回限りの通知を作成することです。
let center = NSNotificationCenter.defaultCenter() let mainQueue = NSOperationQueue.mainQueue() var token: NSObjectProtocol? token = center.addObserverForName("OneTimeNotification", object: nil, queue: mainQueue) { (note) in print("Received the notification!") center.removeObserver(token!) }
以下も見よ
通知監視者の追加と削除
func addObserver(Any, selector: Selector, name: NSNotification.Name?,
object: Any?)
監視者と通知セレクタ、および optional の通知名と送信者とともに、通知センターの急送テーブルにエントリを追加します。
func removeObserver(Any, name: NSNotification.Name?, object: Any?)
通知センターの急送テーブルから一致するエントリを削除します。
通知センターの急送テーブルから特定の監視者を指定するすべてのエントリを削除します。