2016-09-22 39 views
1

我試圖在我的一個項目中切換到Swift Bond 5和Swift 3。 我有兩個方向綁定的問題。我怎樣才能轉換下面的代碼,所以當我的滑塊改變時,它會逐步發出不同的信號,並將其值設置爲半徑可觀察值。在舊的Bond 4和Swift 2.3中,一切正常,但我不知道如何處理這種遷移。Swift Bond 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

雙向綁定到已轉換的信號/ observable並沒有什麼意義,因爲它需要反向轉換來將事件傳播回去。

取而代之的是雙向綁定,你可能要建立以下綁定:

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

此外,你需要刪除distinct運營商或步進不會相當的工作。它不起作用的原因是用戶永遠不會停止觸摸屏幕,所以我們也必須永不停止將滑塊位置更新爲步驟值。

+0

非常感謝您的寶貴意見。是的,這似乎並不合理。唯一認爲在這種情況下的問題是用從滑塊發出的信號更新'半徑'可觀察。其他方向根本不需要。我不知道爲什麼原創開發者做得對。不管怎麼說,還是要謝謝你! –