Cocoa
Swift

SwiftでNSNotificationCenterを使う

More than 1 year has passed since last update.

登録時の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)