首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模仿Reactive<UISlider>?

模仿Reactive<UISlider>?
EN

Stack Overflow用户
提问于 2018-04-25 13:52:43
回答 2查看 171关注 0票数 3

我有一个ViewModel,它在它的初始化器中作为输入

代码语言:javascript
运行
复制
init(sliderEvents: Reactive<UISlider>) {

在考试中,我想做这样的事情

代码语言:javascript
运行
复制
slider.send(.touchDownInside)
slider.send(.valueChanged, 5)
slider.send(.valueChanged, 15)

为了模拟VM,滑块从值5拖动到15,例如

我不清楚RAC是如何构建Base: UISlider的,所以我不知道如何使UISlider的子类成为可能

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-26 09:57:28

下面是另一种应该有效的方法:

代码语言:javascript
运行
复制
protocol SliderProtocol {
    var valuesSignal: Signal<Float, NoError> { get }
}

extension UISlider: SliderProtocol {
    var valuesSignal: Signal<Float, NoError> {
        return reactive.values
    }
}

extension Reactive where Base: SliderProtocol {
    var values: Signal<Float, NoError> {
        return base.valuesSignal
    }
}

class MockSlider: SliderProtocol {
    let mockValue = MutableProperty<Float>(0)

    var valuesSignal: Signal<Float, NoError> {
        return mockValue.signal
    }
}

然后,您的ViewModel应该使用Reactive<SliderProtocol>嵌入它,并且您可以将MockSlider实例传递给它。嘲笑就像设置mockSlider.mockValue.value = 10一样简单。

票数 2
EN

Stack Overflow用户

发布于 2018-04-25 14:52:56

您可以将ViewModel设置为具有ObserverActionMutableProperty (任何需要输入的东西)的Double类型。然后将UISlider值绑定到ViewController中的值。

所以在您的ViewController中,您可以有这样的一行:viewModel.sliderValue <~ slider.reactive.mapControlEvents(.valueChanged){ $0.value },其中sliderValue可以是MutableProperty<Double>类型。

在测试中,您可以设置如下所示的值:viewModelToTest.sliderValue.value = 10

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50024126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档