RxSwift ファーストインプレッション


RxSwift ファーストインプレッション

はじめに

以前触ったことがあったObjective-C製のReactiveなライブラリとしてReactiveCocoa(RAC)がありますがObjective-Cで書かれてることもあって、マクロごりごりで組まれていてSwiftで書くとあまり書きやすいイメージがありませんでした。

なので今回は、よりSwiftの世界に歩み寄ったReactiveなライブラリということでRxSwiftを体験してみました。

そもそもRxSwiftとは?

RxSwiftとはReactiveX (Reactive Extensions)のSwift実装のライブラリで、よく名前を耳にするReactiveProgramming(RP)をSwiftの世界で実現してくれるものです。

ReactiveXはSwiftだけでなく様々なプログラミング言語でライブラリが存在しており、他のプラットフォームでもその概念を持ち込むことが可能です。

各プログラミング言語ごとのRxライブラリ一覧

Language Library
Java RxJava
JavaScript RxJS
C# Rx.NET
C#(Unity) UniRx
Scala RxScala
Clojure RxClojure
C++ RxCpp
Ruby Rx.rb
Python RxPY
Groovy RxGroovy
JRuby RxJRuby
Kotlin RxKotlin
Swift RxSwift

開発環境

  • iOS 8.4
  • Xcode 6.4

Cocoapods

今回はサクッとRxSwiftを入れたかったのでCocoapodsを利用していきます。
なので以下のようなPodfileを作成しました、RxSwiftはdynamic libraryなのでuse_frameworks!を忘れないようにします。

Podfile
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!

pod 'RxCocoa'
pod 'RxSwift'

Podfileの作成が済んだら、作成したディレクトリで以下インストール用のコマンドをターミナルで叩きます

pod install

Playground

動かすのもサクッといきたいのでPlaygroundでRxSwiftを利用できるように環境を作っていきます
Cocoapodsの準備が終わっているならば以下のようなファイル構成になっているはずなのでxcworkspaceを開きます

Xcodeが起動したらメニューから、File > New > File...の順で項目を選択

Playgroundを選択してファイル名を入力して追加します

ファイルの追加まで完了したならば追加したPlaygroundにRxSwiftとRxCocoaをimportします

Playground
import RxSwift
import RxCocoa

この段階でエラーが出てなければ開発環境の導入は完了です

RxSwiftを体験

var a = 1
var b = a + 1
a = 10        // aを書き換える
println(b)    // => 11

Reactive Programmingの説明でよく使われる上記の例を実際にそうなるのかRxSwiftで書いてみます。

Playground
let a = Variable(1)
let b = combineLatest(a, Variable(1), +)

var ret: Int = 0
b >- subscribeNext { next in
    ret = next
}

println(ret)                             // => 2

a.next(10)                               // aを書き換える

println(ret)                             // => 11

aに対して加えた変更が計算結果に影響を与えていることが分かるので、Reactiveに動いてると言えますね。

今回動かしたサンプルをGitHubに挙げてます、リンクはこちら
(サンプルの方で確認したいときはCloneしてきて、ディレクトリ内でpod installすれば確認できます)

おわりに

ReactiveX、RxSwiftともにまだまだ初学者ですが、RPを使いこなしてコードが組めるようになるとプログラマとして次のステップに行けるような気がしています。
あと単純に触っていて面白いので試しに遊ぶ分でも十分楽しめると思います、是非体験してみてください。

Reactive Programmingについての参考リンク一覧