RxSwiftでUISliderの値をUILabelに出力する

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…。

コメント

タイトルとURLをコピーしました