RxSwiftを趣味アプリに使ってみているのだが、何せ難しい。
おまけにCleanArchitectureとやらも入れてみたら、ファイルが激増するわ、Observableとやらが乱立するは大変な事に…。
何とか耐えつつ、単純にUISliderの値をUILabelに出そうとして、何か変なエラーに遭遇してハマったので備忘録。
駄目だったコード
self.slider.rx.value
.bind(to: self.label.rx.text)
.disposed(by: self.disposeBag)
最初のこのコードを書いたところ
Type 'inout UILabel' does not conform to protocol 'ReactiveCompatible'
と言うエラーになった。
inoutって参照渡しで受け取りたい時に付けるキーワードだったかなぁとか、ReactiveCompatibleっていうプロトコルを実装してないのかぁと思いつつ、こんな簡単な事も出来ないとか有り得ないだろと調べていて、以下のコードなら上手くいく事が分かった。
上手くいったコード
self.slider.rx.value
.map{ $0.description }
.bind(to: self.label.rx.text)
.disposed(by: self.disposeBag)
要はsliderのvalueがfloatだから、それをStringに直せば良かったのね(多分)
それにしても、エラーメッセージが無関係過ぎる…。
まとめ
RxSwiftは便利なんだろうけど、ObservableとCleanArchitectureのファイル激増に悩まされすぎ。
趣味グラマが趣味で手を出してはいけないやつだったか。特にCleanArchitecture…。
コメント