我正在尝试在我的一个项目中切换到Swift Bond5和Swift 3。我在双向绑定方面遇到了问题。我如何转换下面的代码,这样当我的滑块改变时,它会发出不同的信号,并设置它的值,然后设置为半径可观测值。在旧的Bond4和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'所以信号不再是可绑定的。有没有人知道如何转换这段代码,以便双向绑定仍然有效?
发布于 2016-09-23 04:28:12
双向绑定到转换后的信号/可观察对象并没有实际意义,因为它需要反向转换才能将事件传播回来。
您可能需要建立以下绑定,而不是双向绑定:
radius.bind(to: radiusSlider)
sliderStepObserver.bind(to: radius)此外,您还需要删除distinct操作符,否则单步执行将无法正常工作。它不工作的原因是用户永远不会停止触摸屏,所以我们也必须永远不要停止将滑块位置更新为步长值。
https://stackoverflow.com/questions/39638724
复制相似问题