)ノTunnelでiOSアプリの制作を担当している富樫です。RoomClipでは、投稿されている写真に対して「いいね!」したり、「フォルダに保存」したりすることができます。それらの機能をスムーズに楽しんでもらうためには、いくつか実現しなければならないユーザ体験があるのですが、その中でもとても基本的でとても渋いものとして、「ある画面で一つの写真に対して『いいね』『保存』などを行った時に、他のスタックしている画面に戻った時にその画面でも該当写真の状態変化が反映されているようにする」というものがあります。以下はイメージ図です。quiz)で恐縮ですが、以下のような構成で4つのclassを準備しました。NotificationManagerはシングルトンのクラスになっていて、アプリの中で一つだけ存在するようになっています。NotificationManagerの中でEventは、実際は複数種類のものが存在しており、それぞれTが異なっています。Tは通知のために必要なパラメータの型が当てられていて、EventsオブジェクトはNotificaionの中で下記のように定義されています。上記の例の「AddLikeParam」は、いいねをした時に他の画面に伝える必要な情報(いいねした写真のIDなど)を包括しています。実際の実装1通知を受け取る必要がある画面では、NotificationManagerのなかの然るべきイベントにsubscribeする。subscribeの引数として、通知を受け取った際の挙動を記述したblockを充てます。ちなみに、これらの処理は全てUIViewControllerの中に記述するものとしています。21を行ったUIViewControllerではsubscriptionをフィールドに保持しておき、UIViewControllerが破棄される際には、必ずsubscriptionをunsubscribeする。Subscriptionはunsubscribeを呼び出すことにより、自身を破棄します。これを、UIViewControllerのdeallocなどで呼び出します。しなければUIViewControllerがリークしてしまうことがあります。3通知をPostする必要がある箇所で、然るべきパラメータを準備し、postを行うこれにより、1で記述したアクションが実行されます。ちなみにviewControllerもPOSTしているのは、ある画面が送った通知を、その画面がそのまま受信するケースがあります。wselfと記述しているのがそのケースです)。Eventsでジェネリクスを用いて安全に、迷わないように。書いてまいりましたが、これまで書いた中で大事だったのはEventsでジェネリクスを用いたことだと思っています。前述の通り、Eventsの「T」はアクションに対応した通知に必要なパラメータです。NotificationManagerの中で各アクションに対応するEventsオブジェクトを定義する際に「T」の型もきっちりと定義しておくことで、それぞれのアクションを行った後に通知をpostする時、いちいち通知の仕様(パラメータの正確な変数名など)に気を配る必要がある通知を受け取る各画面で、通知のパラメータの仕様(パラメータの変数名や型)に気を配る必要があるといった、前述したヒヤヒヤ感がなくなりました。