登録時のselectorの指定方法で迷ったのでメモ。
登録
NSNotificationCenter.defaultCenter().addObserver(self, selector: "update:", name: MyNotification, object: nil)
削除
NSNotificationCenter.defaultCenter().removeObserver(self)
通知を受けた時に実行するメソッド
func update(notification: NSNotification?) {
// 何かする
}
通知
NSNotificationCenter.defaultCenter().postNotificationName(MyNotification, object: nil)
通知名の定義
let MyNotification = "MyNotification"
その他、注意点(追記:15/03/30)
NSObjectを継承していないクラスで使用する場合は
実行するメソッドに@objc
を指定する必要があるようです。
通知を受けた時に実行するメソッド(NSObject非継承時)
@objc
func update(notification: NSNotification?) {
// 何かする
}
サンプル
NSObjectを継承している場合
import UIKit
let MyNotification = "MyNotification"
class Hoge : NSObject {
override init() {
super.init()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "update:", name: MyNotification, object: nil)
}
func update(notification: NSNotification?) {
// 何かする
print("Notification!")
}
}
var hoge = Hoge()
// 通知してみる
NSNotificationCenter.defaultCenter().postNotificationName(MyNotification, object: nil)
NSObjectを継承していない場合
import UIKit
let MyNotification = "MyNotification"
class Hoge {
init() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "update:", name: MyNotification, object: nil)
}
@objc
func update(notification: NSNotification?) {
// 何かする
print("Notification!")
}
}
var hoge = Hoge()
// 通知してみる
NSNotificationCenter.defaultCenter().postNotificationName(MyNotification, object: nil)