Swift:NSNotificationCenter の使い方とサンプルコード

クラスで何かの処理が終わったとき、ViewController クラスへ通知したいときがあります。
そういった場合にはその名のとおり NSNotificationCenter を使用します。デリゲートパターンを使う方法もありますが、NSNotificationCenter の方が直感的に理解できるかもしれません。

今回はこの NSNotificationCenter の使い方を、サンプルを交えながら説明したいと思います。

NSNotificationCenter の使い方

NSNotificationCenter を使用するためには定義・登録をしなければ使用できません。

全体の流れとしては、

  1. NSNotificationCenterの定義・登録
  2. NSNotificationCenterへ通知を依頼(送信)
  3. NSNotificationCenterから通知を受ける(受信)
  4. NSNotificationCenterの削除

といった感じになります。以下に順を追って説明します。


  1. NSNotificationCenterの定義
    // Define Notification(定義)
    let MyNotification = "MyNotification"
    NSNotificationCenterの登録
    // Register Notification(登録)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "myFunc:", name: MyNotification, object: nil)

  2. NSNotificationCenterへ通知を依頼(送信)
    // Post Notification(送信)
    let ns = NSNotificationCenter.defaultCenter()
    ns.postNotificationName(MyNotification, object: nil)

  3. NSNotificationCenterから通知を受ける(受信)
    // Notification Method(通知受信時のメソッド)
    func myFunc(notification: NSNotification?) {
        // Notification 受信時の処理
    }

  4. NSNotificationCenterの削除
    // Remove Notification(削除)
    NSNotificationCenter.defaultCenter().removeObserver(self)

サンプルコード

以下はアプリケーションがバックグラウンドになったとき AppDelegate クラスから MainViewController へ通知を行うサンプルです。

AppDelegate

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    // Define Notification(定義)
    let ApplicationDidEnterBackgroundNotification = "ApplicationDidEnterBackgroundNotification"
    
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        return true
    }

    func applicationDidEnterBackground(application: UIApplication) {
        
        // Post Notification(送信)
        let ns = NSNotificationCenter.defaultCenter()
        ns.postNotificationName(ApplicationDidEnterBackgroundNotification, object: nil)
    }
}

MainViewController

import UIKit
class MainViewController: UIViewController {

    // Define Notification(定義)
    let ApplicationDidEnterBackgroundNotification = "ApplicationDidEnterBackgroundNotification"

    override func viewDidLoad() {
        super.viewDidLoad()

        // Register Notification(登録)
        NSNotificationCenter.defaultCenter().addObserver(
            self,
            selector: "applicationDidEnterBackground:",
            name: ApplicationDidEnterBackgroundNotification,
            object: nil
        )
    }

    // Notification Method(通知受信時のメソッド)
    func applicationDidEnterBackground(notification: NSNotification) {
        println("applicationDidEnterBackground!")
    }
}

まとめ

NSNotificationCenter の使用できる場面は限定的なものになってしまいますが、何か新しいクラスを作成するときに、完了処理等に NSNotificationCenter をあらかじめ実装しておけば、後々便利に場面もあるかと思います。

また、NSNotificationCenter の記述は冗長になりがちなので乱用は禁物ですが、言語に慣れないうちは、使う場面を選びながら使用すればコードの可読性があがり、メンテナンスがしやすくなるかと思います。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents