1

我正在尝试在我的一个项目中切换到 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'

所以信号不再可绑定。有人知道如何转换这段代码以使双向绑定仍然有效吗?

4

1 回答 1

1

双向绑定到转换后的信号/可观察对象并没有真正意义,因为它需要逆变换才能将事件传播回去。

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

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

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

于 2016-09-22T20:28:11.523 回答