Ios 我们如何通过distinctuntilChange只允许两个不同的项来过滤一个可观察项
目前,我正在观察滑块的Ios 我们如何通过distinctuntilChange只允许两个不同的项来过滤一个可观察项,ios,objective-c,swift,functional-programming,rx-swift,Ios,Objective C,Swift,Functional Programming,Rx Swift,目前,我正在观察滑块的类型和值(intint而不是Float),并将它们放入元组中 durationSlider.rx_controlEvent(UIControlEvents.ValueChanged) .subscribeNext { in viewModel.callback.value = (type:SliderType.Duration, value:Int((self?.dur
类型
和值(intint而不是Float)
,并将它们放入元组中
durationSlider.rx_controlEvent(UIControlEvents.ValueChanged)
.subscribeNext { in
viewModel.callback.value = (type:SliderType.Duration, value:Int((self?.durationSlider.value)!))
}
.addDisposableTo(disposeBag)
回调
是视图模型中的变量
类型。为了得到改变,我正在做
callback.asObservable()
.subscribeNext {(sliderType, value) in
print("value n is \(value)")
}
.addDisposableTo(disposeBag)
因为我以Int类型而不是Float发出valueChanged
,所以得到了一些相同的值
value is 13
value is 13
value is 14
...........
是否有任何方法可以避免获得相同的值,以便我只获得滑块Int中的不同值。我不完全确定在这种情况下是否可以使用distinctUntilChange()
欢迎所有评论。有两种可能的解决方案
callback.asObservable()
.distinctUntilChanged { $0.1 == $1.1 }
.subscribe(onNext: { _ in /* .. */ })
如果您需要在需要对执行操作的代码的其他部分中有订阅服务器,那么这很好。下一个事件不一定是不同的
值之前防止重复
durationSlider.rx_controlEvent(UIControlEvents.ValueChanged)
.map { _ in Int(self!.durationSlider.value) }
.distinctUntilChanged()
.subscribeNext { value in
viewModel.callback.value = (type:SliderType.Duration, value: value)
}
这可能就是您正在寻找的解决方案。在这里,我们首先将每个值更改事件映射到实际值,然后再过滤重复项。这将确保我们不会在回调中的一行中两次设置相同的值。但这不会阻止代码的另一部分将回调的值设置为完全相同的值,在这种情况下,对回调的订阅可能会收到重复的值
嘿@tomah你知道有没有一种方法可以在distintichanged调用中命名元组的参数,就像这一行一样
.distinctUntilChanged{$0.1==1.1}