ReduxSampleSwift
[ING] SwiftでReduxとUI実装を合わせたサンプル(iOS Sample Study: Swift)
「チュートリアル → ユーザーの情報入力 → 1画面に複数の画面要素が混在する」という形のUI実装において、「アプリ表示に必要なデータの値 = アプリのUI要素の状態」として結びついている仕組みをiOSアプリでReduxアーキテクチャを実現するライブラリ「ReSwift」を利用して実現したアプリサンプルになります。
※Swift5.x系の変更点: Enum表記を右記のように変更しています。 【×】case someActionName(): → 【○】case someActionName:
ReSwift.Action
で定義しているEnumにおいて引数を取らない(Reducerへ値を送る必要が特段ない)ものについては()
が不要です。
実装概要
画面遷移以外の画面の要素表示に関する部分をReduxで管理することでそれぞれの状態に合わせた状態を実現するような構成を取っています。またContainerViewを利用した親子関係を持ったViewControllerがある場合でも対処できるような形にしています。
本サンプルの画面キャプチャ
画面キャプチャその1
画面キャプチャその2
画面キャプチャその3
本サンプルにおけるRedux処理の概要図と処理フロー
Reduxの処理に必要な各々の処理で行われている内容と、処理フローをまとめた図解は下記のようになります。
またこのサンプルにおけるRedux関連処理部分のファイル名は下記のようになります。
利用ライブラリ一覧
- ReSwift → ReduxのSwift実装用
- PromiseKit → 非同期通信のハンドリング
- SwiftyJSON → JSONデータの解析をしやすくする
- Alamofire → HTTPないしはHTTPSのネットワーク通信用
- AlamofireImage → 画像URLからの非同期での画像表示とキャッシュサポート
- RealmSwift → アプリ内のデータベース
- CalculateCalendarLogic → 日本の祝祭日の判定
- KYNavigationProgress → UINavigationBar直下へのProgressBar表示
※ CalculateCalendarLogic
およびKYNavigationProgress
についてはSwift4.2でバージョン固定しています。
その他補足事項や詳細記事に関して
特にReduxのメリットを生かしたUI実装を行なっている部分のポイントは下記の3つのケースになるかと思います。
このサンプル全体の詳細解説とポイントをまとめたものは下記に掲載しております。