Как поддержать DifferentUntilChanged для Binder в RxSwift? - PullRequest
0 голосов
/ 07 декабря 2018

Я сделал простое расширение Rx для библиотеки FloatRatingView для его свойства rating, например:

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)

Ошибка:

У значения типа 'Binder' нет члена 'DifferentUntilChanged'

1 Ответ

0 голосов
/ 07 декабря 2018

Я предполагаю, что ваше представление имеет свойство 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)
...