Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。KB)連載第2回となる今回は、RxSwiftの処理の基本的なデザインパターン「Observerパターン」を中心に、基本的な事柄を説明します。Observerパターンの考え方、Observerパターンで利用できる基本的なクラスの説明、UIを使った処理の3つについて、順を追ってサンプルを交えながら説明します。本連載では、これからRxSwiftを導入する方を対象読者としている関係上、RxSwift導入の初歩的な手順に関して主な説明を行います。そのため、便宜上クラス/メソッドの使い方が必ずしもRxSwiftの詳細な仕様通りでないこともあります。この点をご了承ください。3UIを利用してRxSwiftのサンプルを確認するRxを利用してUIのイベントから処理を動かす/値を取得するdelegateの代わりにRxで処理を行うデータバインドを利用するまとめはじめにRxSwiftを含めたRx全般において、処理の流れの基本的な設計として用いられるものの1つに、Observerパターンと呼ばれるデザインパターンがあります。デザインパターンとは、オブジェクト指向プログラミングの中で再利用可能な設計手法のことです。簡単に言うと、同じような処理方法のフォーマットを使いまわすことで、効率よくプログラムを組む設計手法の1つです。連載第1回で紹介した通り、RxSwiftでは処理のやり方が共通しているので、Observerパターンの考え方を理解することがRxSwiftを使いこなすための第一歩と言えます。RxSwiftにおけるObserverパターン(1)RxSwiftで採用されているObserverパターンObserverパターンとは、あるオブジェクトで発生したイベントを別のオブジェクト(オブザーバー)へ通知する処理で用いられるデザインパターンの1つです。Observerパターンのイメージ別の見方をすると、オブジェクトを監視してイベントが発生した場合に、そこのことをオブザーバーへ通知するモデルとも言えます。RxSwiftで言うイベントとは、画面上で発生するタップイベントの他に、変数の値が変わった/APIから値が取得できたなどプログラム内におけるオブジェクトの状態の変化全てを指します。SwiftのUIControlEventなどよりも広い範囲を扱い、一般的なアプリ開発で指すSwift内のイベントよりも意味が大きいことに気をつけてください。RxSwiftでは、イベントストリームの中で流れて来るデータの部分をデータストリームと呼びます。Observerパターンでデータストリームを扱うクラスには、次の2つのクラスが存在します。実行者のことを「出版」、監視者のことを「購読」と呼ぶ場合もあります。古い言い方ですが、Observerパターンを出版-購読の関係になぞらえた言い方です。その場合の考え方は次の通りです。出版社が事業を始め、定期的な刊行物を発行します。購読者は、出版社に購読の申し込みをすると定期的に刊行物が届けられます。購読を解除すると、解除日以降は刊行物は届けられません。出版者が新聞や雑誌などの定期刊行物を発行し、それを誰でも好きなタイミングで購読したり辞めたりできることと同じように考えるものです。データストリームを監視するメソッドの名前がsubscribe(購読する)であり、出版-購読の考え方も仕様上はまだ残っているので、ここで軽く触れておきます。先にRxSwiftのObserverパターンで受け取れる通知について説明します。連載第1回でも説明した通り、RxSwiftでは通知を受け取った後に処理が走りますので、どのように通知されるのかを前もって知っておく必要があります。RxSwiftのドキュメントを参照すると、イベントについては列挙型で次のように定義されています。successfully}それぞれのイベントの意味は次の通りです。なしイベントが発生した際には、そのイベントの発生によって生じた値を.nextで参照することができます。Int型/String型/配列/JSONなど値の型の種類に関わらず、値が変化した際にはその変化した後の値を通知によって全て受け取れるます。RxSwiftでイベントを購読した後は、通知以外に特別な処理は必要なく変化した値を参照できる非常にシンプルな仕組みであることがわかります。エラーが発生した場合には、.errorでエラー情報が渡されます。エラーに関してはSwiftで利用できる一般的なエラーオブジェクトと定められており、こちらもエラーの際に特別なオブジェクトが必要ではないことがわかります。処理が完結した際には、.completedで処理が完了したことが通知されます。完了の際の通知では、値やエラー情報は伴いません。.errorと.completedが通知された後は処理は完了となり、その後に別の通知が来ることもありません。前回のマーブルダイアログの図で3つのイベントを表すと次の図のようになります。マーブルダイアログに配置した3つのイベントRxSwiftではデータストリームを監視して得られるイベントはこの3種類であることを覚えておいてください。監視可能なものを扱うObservableクラス前項の3つのイベントを通知するオブジェクトは、Observableクラスで扱われます。文字通り監視可能/購読可能なものを扱うといった意味です。Observableクラスのイベントを受け取れるメソッドの1つにsubscribe(_:)メソッドというメソッドがあります。subscribe(_:)メソッドの書式とイメージは次の通りです。})subscribe(_:)メソッドのイメージonNext/onError/onCompletedの後の処理が、それぞれObservableオブジェクトのnext(Element)/error(Swift.Error)/completedの通知に対応しています。onNext内ではイベントが発生した際の値/onError内にエラー情報が渡されます。{}内ではクロージャの形式で処理を記述します。onNext/onError/onCompletedの各処理は必須ではなく、必要なものだけ記述できます。エラー発生時の処理のみを行いたい場合は、onErrorの処理のみを記述する、といった使い方ができます。subscribe(_:)メソッドの戻り値はDisposableオブジェクトです。DisposableオブジェクトはObservableオブジェクトを利用する必要が無くなった際に、自動的にメモリを解放するオブジェクトです。