ios - 如何在 RxSwift 中为 Binder 支持 distinctUntilChanged?

标签 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()

我的想法是,在将评级值传递给 Controller ​​之前,我需要进行节流或去抖动,如下所示:

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

        }.disposed(by: self.disposeBag)

错误是:

Value of type 'Binder' has no member 'distinctUntilChanged'

最佳答案

我假设您的 View 具有 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)

关于ios - 如何在 RxSwift 中为 Binder 支持 distinctUntilChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53669475/

相关文章:

objective-c - 如何从 NSDate 返回 "UTC+XX:XX"或 "UTC-XX:XX"格式

ios - 如何将 UIBarButtonItem 放在 Swift4 上的 NavigationController 的 ViewController 上?

ios - Realm swift : passing unpersisted objects between threads

ios - 为什么我的 rx 订阅没有在我的 onNext 上触发?

ios - 在 xcode 中集中显示弹出窗口

objective-c - Xcode 4.1 同时关闭两个 ModalViewController

ios - 水平条形图 : how to add X-Bar Axis Labels

ios - 如何链接 Observables 并为错误处理创建一个公共(public)位置

ios - Rx swift : Observing UITextFields from TableViewCell inside a child view controller

ios - 我们如何通过 distinctuntilChange 只允许 2 个不同的项目来过滤 Observable