MENU
コンテンツ再構築中

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

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

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

INDEX

NSNotificationCenter の使い方

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

全体の流れとしては、

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

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

  1. NSNotificationCenterの定義
    [code]
    // Define Notification(定義)
    let MyNotification = “MyNotification”
    [/code]
    NSNotificationCenterの登録
    [code]// Register Notification(登録)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: “myFunc:”, name: MyNotification, object: nil)[/code]
  2. NSNotificationCenterへ通知を依頼(送信)
    [code]// Post Notification(送信)
    let ns = NSNotificationCenter.defaultCenter()
    ns.postNotificationName(MyNotification, object: nil)[/code]
  3. NSNotificationCenterから通知を受ける(受信)
    [code]// Notification Method(通知受信時のメソッド)
    func myFunc(notification: NSNotification?) {
    // Notification 受信時の処理
    }[/code]
  4. NSNotificationCenterの削除
    [code]// Remove Notification(削除)
    NSNotificationCenter.defaultCenter().removeObserver(self)[/code]

サンプルコード

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

AppDelegate

[code]
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)
}
}
[/code]

MainViewController

[code]
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!”)
}
}
[/code]

まとめ

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

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

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

Please share it!
  • URLをコピーしました!
  • URLをコピーしました!
INDEX