如何在RxSwift中为Binder支持distinctUntilChanged?

时间:2018-12-07 12:22:29

标签: ios swift rx-swift

我为FloatRatingView库的rating属性做了一个简单的Rx扩展,如下所示:

import UIKit
import RxSwift
import RxCocoa

public extension Reactive where Base: FloatRatingView {

    /// Bindable sink for `rating` property
    public var rating: Binder<Double?> {
        return Binder(self.base) { frv, attr in
            frv.rating = attr ?? 0
        }
    }
}

问题是,我如何使该扩展支持.distinctUntilChanged()

我的想法是,在将额定值传递给控制器​​之前,需要先进行节流或防抖操作,例如:

    self.ratingView_Driver.rx.rating
        .distinctUntilChanged()
        .debounce(0.5, scheduler: MainScheduler.instance)
        .subscribe { _ in

        }.disposed(by: self.disposeBag)

错误是:

  

“活页夹”类型的值没有成员“ distinctUntilChanged”

1 个答案:

答案 0 :(得分:1)

我假设您的视图具有rating属性。

extension Reactive where Base: FloatRatingView {
    var rating: Observable< Double > {
        return self.observeWeakly(Double.self, #keyPath(FloatRatingView.rating)).map { $0 ?? 0 }
    }
}

使用:

self.ratingView.rx.rating
        .distinctUntilChanged()
        .debounce(0.5, scheduler: MainScheduler.instance)
        .subscribe { _ in

        }.disposed(by: self.disposeBag)