[Swift] 様々なReactive Swiftで同じサンプルを作ってみた (RxSwift, ReSwift, SwiftBond編)

  • 99
    いいね
  • 0
    コメント

概要

近頃、ReactiveのSwiftライブラリが沢山登場しています。
全部勉強してみて肌感掴んでおこうと思い、
下記の機能で同じアプリを作ってみて比較してみようと思いました。
https://github.com/naoto0822/try-reactive-swift

機能

  • APIリクエスト
  • UITableViewで表示
  • 引っ張って更新 (UIrefreshControl)
  • スクロールでページング
  • タップで詳細画面表示(SFSafariViewController)

image

今回は下記の3つでそれぞれ作ってみます。

Githubに公開してあります。
書き方がおかしかったり、上の機能が網羅できてないprojもあるので、ぜひPRお願いします。
https://github.com/naoto0822/try-reactive-swift

それぞれ感じたことを書いていきます。

RxSwift

メリット

  • ViewModelを作って状態を管理することで、ViewControllerがとても薄くなる
  • オペレーターの種類が豊富
  • UIの変更に強くなる
  • Rxの歴史が長くドキュメントが豊富

デメリット

  • アプリ全体に適用させて初めて効果を発揮しそう (プロダクションへの導入障壁が高いかも)
  • 大規模になってバインド量が増えると混乱しそう

ReSwift

メリット

  • Redux(Fluxフレームワーク)の概念を取り込んでいるので、理解がしやすかった
  • 必要なactionだけ取り出せば良い
  • Action-Reducer->Store, Stateと構造がぶれない

デメリット

  • iOSにはVDOMの概念ないので、Redux(Flux)の概念を持ってくるには無理やりな気がする
  • グローバルな変数・処理が多い
  • 大規模になるとReducerあたりでswitch地獄になりそう

SwiftBond

メリット

  • 軽量でお手軽 (RxSwiftとくらべて)
  • ViewModelを作って状態を管理することで、ViewControllerがとても薄くなる

デメリット

  • 大規模になってバインド量が増えると混乱しそう
  • 作者がReactiveKitという別のも作ってる

感想

基本的にはどれも便利で、複雑な状態変化の監視を容易にしてくれると思いました。
どれも何日か触ってみて感じたことなので、あまり参考にならないかもしれません。

次はReactiveKit、SwiftFluxあたりを触ってみようと思います。

関連リンク