RxSwift如何附加到BehaviorSubject< []>

时间:2018-03-12 20:56:03

标签: swift rx-swift

由于在RxSwift 4中不推荐使用Variable,ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 执行以下操作的等效方式是什么?

BehaviorSubject

2 个答案:

答案 0 :(得分:11)

BehaviorRelay 是新版本 RxSwift Variable 的替代品,它们的工作方式似乎相似。 变量具有属性,在更改时会发出事件。与使用BehaviorRelay的类似,您可以使用基础 accept(:)方法来更改值。

let array = BehaviorRelay(value: [1, 2, 3])

array.subscribe(onNext: { value in
    print(value)
}).disposed(by: disposeBag)


// for changing the value, simply get current value and append new value to it
array.accept(array.value + [4])

尽管如此,如果您愿意,也可以使用 BeviourSubject 进行处理,

let subject = BehaviorSubject(value: [10, 20])
subject.asObserver().subscribe(onNext: { value in
    print(value)
}).disposed(by: disposeBag)

您可以使用投掷函数 value() BehaviorSubject 获取最新值,然后附加如下所示的值,

do {
    try subject.onNext(subject.value() + [40]) // concatenating older value with new 
} catch {
    print(error)
}

请注意,您需要调用onNext将新值传递给 BehaviorSubject ,这不像使用 Variable BahaviorRelay 那样简单

答案 1 :(得分:0)

我们还可以使用BehaviorRelay扩展名轻松地添加对象:

extension BehaviorRelay where Element: RangeReplaceableCollection {

    func add(element: Element.Element) {
        var array = self.value
        array.append(element)
        self.accept(array)
    }
}

用法:

self.wishList.add(element: item.element)

wishList是BehaviorRelay

的对象