RxSwift, как обновить BehaviourSubject лучше? - PullRequest
0 голосов
/ 24 мая 2019

У меня BehaviourSubject, и я хочу обновить элементы с последним выданным значением.Я могу сделать это, пример ниже,

 func refreshCurrent() {
    do {
        let items = try currentMatchList.value()
        if !(items.first?.items ?? []).isEmpty {
            refreshItems(sportId: try currentSport.value())
        }
    } catch {
        LOG.error(error.localizedDescription)
        return
    }
}

Но мне было интересно, есть ли какие-либо встроенные функции RxSwift, которые я мог бы использовать для той же задачи?

Я обнаружил, что там было Variable()введите однажды, но теперь это прошло, и рекомендуется использовать BehaviourSubject, кажется.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

После поиска всех проблем в официальном репозитории github, я нашел долгое обсуждение этой же проблемы здесь , и оно закрыто.

НО хорошая новость заключается в том, что freak4pc утверждает, что мы можем использовать класс RxCocoa BehaviourRelay, и у него есть метод прямого доступа к значению

example("BehaviorRelay") {
    let disposeBag = DisposeBag()
    let subject = BehaviorRelay<String>(value: "?")

    print(subject.value)

    subject.addObserver("1").disposed(by: disposeBag)
    subject.accept("?")
    subject.accept("?")

    print(subject.value)

}
0 голосов
/ 24 мая 2019

Не знаю, правильно ли я вас понял, но похоже, что вы хотите сохранить свое значение в пределах BehaviourSubject.

let foo = BehaviourSubject<[Something]>(value: [])
print(foo.value) //Empty Array
foo.accept([Something(), Something()])
print(foo.value) //Array of two somethings
...