我正在开发一个iOS项目。
我的ViewController上有一个UISlider
。
我想将Float属性(var)绑定到当前滑块值。
如果我更改此属性值,我想自动更新我的滑块位置。
如果我移动滑块,我想自动更新属性值。
我已经使用delegates et stuff手动工作,但我想知道是否有最简单的方法。 事实上,我有很多(非常巨大的)UISliders,价值观可以从程序的其他部分改变。
我知道在C#中可以观察一个值并将其与UI组件绑定。我想在swift中做同样的事情
答案 0 :(得分:0)
有很多方法可以做到这一点以及许多帮助您完成此任务的库。
我喜欢Bond。
它允许您在没有didSet
样板的情况下观察属性值,并帮助您保持代码清洁。
例如,这完全符合您的要求:
import Bond
let ageSlider = UISlider()
let age = Observable<Float>(0)
ageSlider.bnd_value.bidirectionalBindTo(age)
这可以帮助您保留MVC或MVVM模式,因为更改模型属性也会立即更新UI(反之亦然!):
age.Value = 18
print(ageSlider.value) // Prints 18
您还可以将值组合成一个值:
let slider1 = UISlider()
let slider2 = UISlider()
let averageValue = combineLatest(slider1.bnd_value, slider2.bnd_value).map{ (v1, v2) in (v1 + v2) / 2 }
averageValue.observe { newValue in
print("New average value is \(newValue)")
}
the project page中的更多信息。