Swift Bond 5从4双向迁移

时间:2016-09-22 12:11:39

标签: data-binding swift3 reactivekit

我试图在我的一个项目中切换到Swift Bond 5和Swift 3。 我有两个方向绑定的问题。如何转换下面的代码,以便在我的滑块更改时,它会逐步发出不同的信号并将其值设置为半径可观察值。在旧的Bond 4和Swift 2.3中,一切正常,但我不知道如何处理这种迁移。

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 个答案:

答案 0 :(得分:1)

对转换后的信号/可观察对象的双向绑定实际上没有意义,因为它需要逆变换来传播事件。

您可能希望建立以下绑定,而不是双向绑定:

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

此外,您需要删除该distinct运算符,否则步进将无法正常工作。它不起作用的原因是用户永远不会停止触摸屏幕,因此我们也必须永远不要停止将滑块位置更新为步进值。