2016-09-22 7 views
1

私は自分のプロジェクトの中でスウィフトボンド5とスウィフト3に切り替えようとしています。 2方向バインディングに問題があります。スライダが変化しているときに、次のコードを次のように変換するにはどうすればよいですか?ステップごとに異なる信号を出し、その値を半径で観測可能な値に設定します。古いボンド4とスウィフト2.3ではすべてがうまくいっていましたが、この種の移行をどのように処理するのか分かりません。スウィフトボンド5 4方向からマイグレーション

let radiusSlider: UISlider = /* slider initialisation */ 
let radius = Observable<Float>(10.0) 

let stepValue:Float = 50.0 
let sliderStepObserver = radiusSlider.bnd_value.map { roundf($0/stepValue)*stepValue }.distinct() 
radiusSlider.value = radius.value 
radius.bidirectionalBind(to: sliderStepObserver) /* here is the problem */ 

エラーメッセージが言っている:

Argument type 'Signal<Float, DynamicSubject.Error>' (aka 'Signal<Float, NoError>') does not conform to expected type 'BindableProtocol' 

だから信号はもうバインド可能ではありません。双方向バインディングがまだ機能するように、このコードを変換する方法はありますか?

答えて

1

変換された信号/観測可能な信号への双方向結合は、イベントを伝搬するために逆変換を必要とするため、実際には意味をなさない。

代わりに双方向の結合を、あなたはおそらく、次のバインディングを確立したい:

radius.bind(to: radiusSlider) 
sliderStepObserver.bind(to: radius) 

また、あなたはdistinctオペレータまたはステッピングかなりないであろう作品ということを削除する必要があります。それがうまくいかない理由は、ユーザーが画面に触れるのを止めることがないため、スライダーの位置をステップ値に更新することを決して止めないことです。

+0

ありがとうございます。はい、これは本当に意味をなさないと思われます。この場合重要なことは、スライダから放出される信号で観測可能な「半径」を更新することだけだったと考えます。他の方向は全く必要ありません。私は元の開発者がそれを正しくした理由を知らない。とにかくありがとう! –

関連する問題