Instance Method インスタンスメソッド

addObserver(forName:object:queue:using:)

Adds an entry to the notification center to receive notifications that passed to the provided block. ある登録項目を通知センターに加えて、提供されたブロックに渡された通知を受信します。

Declaration 宣言

func addObserver(forName name: NSNotification.Name?, 
          object obj: Any?, 
           queue: OperationQueue?, 
           using block: @escaping (Notification) -> Void) -> NSObjectProtocol

Parameters パラメータ

name

The name of the notification to register for delivery to the observer block. Specify a notification name to deliver only entries with this notification name. オブザーバブロックに配達するために登録することになる通知の名前。ある通知名を指定して、この通知名をもつ登録項目のみを配達するようにしてください。

When nil, the sender doesn’t use notification names as criteria for delivery. nilの場合、送信者は通知名を配達のための基準として使いません。

obj

The object that sends notifications to the observer block. Specify a sender to deliver only notifications from this sender. 通知それらをオブザーバブロックに送信するオブジェクト。ある送信者を指定して、この送信者からの通知のみを配達するようにしてください。

When nil, the notification center doesn’t use the sender as criteria for the delivery. nilの場合、通知センターは送信者を配達の基準として使いません。

queue

The operation queue where the block runs. オペレーションキュー、そこでblockが動作します。

When nil, the block runs synchronously on the posting thread. nilの場合、ブロックは投函しているスレッド上で同期的に動作します。

block

The block that executes when receiving a notification. ある通知を受け取る時に遂行するブロック。

The notification center copies the block. The notification center strongly holds the copied block until you remove the observer registration. 通知センターはブロックをコピーします。通知センターは、コピーされたブロックを、あなたがオブザーバ登録を除去するまで強固に保持します。

The block takes one argument: the notification. ブロックは1つの引数:通知をとります。

Return Value 戻り値

An opaque object to act as the observer. Notification center strongly holds this return value until you remove the observer registration. オブザーバとしての役割を果たすことになる不透明オブジェクト。通知センターは、この戻れ値を、あなたがオブザーバ登録を除去するまで強固に保持します。

Discussion 議論

If a notification triggers more than one observer block, the blocks can all execute concurrently (but on their queue or on the current thread). 通知が1つのオブザーバブロックより多く引き起こすならば、ブロックそれらは全て同時に遂行できます(しかしそれらのキュー上でまたは現在のスレッド上で)。

The following example shows how you can register to receive locale change notifications. 以下の例は、どのようにあなたがロケール変更通知を受け取るために登録できるかを示します。


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)")
}

Unregister an observer to stop receiving notifications. To unregister an observer, use removeObserver(_:) or removeObserver(_:name:object:) with the most specific detail possible. For example, if you used a name and object to register the observer, use the name and object to remove it. オブザーバを登録解除することで、通知の受け取りを停止してください。あるオブザーバを登録解除するには、removeObserver(_:)またはremoveObserver(_:name:object:)をできるだけ多くの具体的な詳細で使ってください。例えば、あなたがオブザーバを登録するのに名前とオブジェクトを使ったならば、名前とオブジェクトを使ってそれを除去してください。

You must invoke removeObserver(_:) or removeObserver(_:name:object:) before the system deallocates any object that addObserver(forName:object:queue:using:) specifies. あなたは、removeObserver(_:)またはremoveObserver(_:name:object:)を発動しなければなりません、addObserver(forName:object:queue:using:)が指定する何らかのオブジェクトをシステムがデアロケートする前に。


let center = NSNotificationCenter.defaultCenter()
center.removeObserver(self.localeChangeObserver)

Another common practice is to create a one-time notification by removing the observer from within the observation block, as in the following example. 別の通常の方法は、ワンタイム通知を、オブザーバを監視ブロック内部から取り除くことによって作成することになります、以下の例でのように。


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!)
}

See Also 参照

Adding and Removing Notification Observers 通知を追加および除去する