Help us understand the problem. What is going on with this article?

【Swift】NotificationCenterの使い方

今回、あるViewControllerから別のViewControllerに処理を伝搬したいものがあり、
調べたところ、NotificationCenterを使えば実現できると知り実装しました。

今回はその実装方法について説明してみようと思います。

NotificationCenterって??

NotificationCenterは、異なるViewController間のイベント通知を実現できるもので、
発信側と受信側が存在します。

それぞれ、この通知が来たらこの処理をする!
この処理を実行したらあのViewControllerに処理をお願いする!
みたいなことが可能になります。

使い方

通知名前空間の拡張

まず、下記をどこかのファイルに記載してください。
拡張のため、どのファイルに書かないといけないみたいなことはありませんが、
あとから見返してわかる場所に書くことがベストだと思います。

extensions.swift
extension Notification.Name {
    static let notifyName = Notification.Name("notifyName")
}

通知を送りたい側

SendViewController.swift
// 通知を送りたい箇所でこのように記述
NotificationCenter.default.post(name: .notifyName, object: nil)

通知を受け取りたい側

まずはじめに、受け取りたい側のVCでNotificationCenterを登録します。
こうすることで、notifyName通知が発行されたタイミングで、doSomething()が実行されるようになります。

catchViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()
    /// NotificationCenterを登録
    NotificationCenter.default.addObserver(self, selector: #selector(doSomething(notification:)), name: .notifyName, object: nil)
}

注意点

NotificationCenterを登録しっぱなしでは、再度同じ画面を開いた場合、
登録が重複していってしまうため、画面から離れるタイミングでremoveObserverを実行することが重要です。

iOS9.0以降はremoveObserverが不要のようです。
コメントにてご指摘いただきました!
ありがとうございます。
参考サイト Apple公式ドキュメント

catchViewController.swift
NotificationCenter.default.removeObserver(self)

さいごに

これはオブザーバーパターンといわれるもので、
MVVMを使用する場合、使用する頻度が高いんじゃないかなと思います。
値の受け渡しもできるので、私ももう少し勉強を進めていきたいと思います。

では!!

ryo-ta
IT業界はもうすぐ6年目のエンジニア?です。 最近はマネジメントに興味があります。
i-enter
「効果」をつねに提供します。スマホアプリ開発No.1の実績。最新のIoTに対応した開発も行います。
https://www.i-enter.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした