由于在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
答案 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