1
Help us understand the problem. What are the problem?

posted at

イベント通知~オブザーバパターン~

イベント通知とは

イベントの発生箇所となるオブジェクトが、他のオブジェクトにイベントの発生を伝えること。

イベント・・・アプリケーション内で発生するあらゆる事象のこと。

イベント通知のパターン

・デリゲートパターン
・クロージャ
・オブザーバパターン

オブザーバパターン

できること

1対多のイベント通知
-> ex) 特定のオブジェクトが変更されたタイミングで、複数の画面が更新されるケース

構成要素

・サブジェクト >>> オブザーバを管理し、通知を発行する
・オブザーバ >>> 通知を受け取る対象

デメリット

むやみに多用すると、どのタイミングで通知が発生するか予想しづらくなり、処理を追うのが難しくなってしまう。

実装方法

1: 通知を受け取るオブジェクトにNotification型の値を引数に持つメソッドを実装する
2: NotificationCenterクラスに通知を受け取るオブジェクトを登録する
3: NotificationCenterクラスに通知を投稿する

example)

Hoge.swift
import Foundation

class Poster { 
  static let notificationName = Notification.Name("HogeNotification")
  
  func post() { 
    NotificationCenter.default.post(
      name: Poster.notificationName, object: nil
    )
  }
}

class Observer {
  init() {
    NotificationCenter.default.addObserver(
      self,
      selector: #selector(handleNotification(_:)),
      name: Poster.notificationName,
      object: nil
    )
  }

  deinit {
    NotificationCenter.default.removeObserver(self)
  }

  @objc func handleNotification(_ notification: Notification) {
    print("通知を受け取りました")
  }
}

var observer = Observer()
let poster = Poster()
poster.post() // 通知を受け取りました

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?