SwiftでiOSアプリをRedux(ReSwift)で開発しています。
この時Reduxではステート(struct)のプロパティは var
で定義すべきでしょうか。
現在私が書いているアプリでは、プロパティが全てletで定義されたstructを使ってステートが作られています。
つまりイミュータブルなわけですが、新しいステートを生成する時にオブジェクトをまるっと作り直さないといけません。
例えばこのようなステートがあって、nameだけを書き換えたい場合
swift
1// State定義 2struct SomeState { 3 let id: Int 4 let name: String, 5 let age: Int 6} 7// 一部のプロパティだけを更新したい場合 8let newState = SomeState( 9 id: oldState.id, 10 name: "new name", 11 age: oldState.age 12)
みたいなことを毎回やらないといけなくて面倒です。
実際の状態はこれよりプロパティ数も多く、配列だったりネストしていたりするので都度 map
を書いて特定のIDのアイテムだけを更新しないといけなくて大変です。
また現状だと、特定のフィールド書き換えるためだけのラッパーメソッドが多数定義されており、かなり冗長なコードになってしまっているのも気になります。
一方ReSwiftの公式サンプルだと、プロパティは var
で定義されていて、これなら更新は対象のプロパティへの代入で済みます。
しかしimmutableではないのでReduxのフレームワーク外などから書き換えが容易にできてしまうという問題があります。
このことを気にして、当アプリではこれまでStateをイミュータブルにしてきたようでした。
まぁReduxに完全に乗せるべきというのと、テストを書けという話ではあるかもしれませんが...
個人的にはサンプルや他の文献を読んでそう感じました。
Redux初心者なので、この辺はどうするのが正解なのか、知見のある方いたらアドバイスいただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。