如何在 RxSwift 中将值附加到观察到的数组
Posted
技术标签:
【中文标题】如何在 RxSwift 中将值附加到观察到的数组【英文标题】:How do I append values fo an observed array in RxSwift 【发布时间】:2020-01-03 08:59:16 【问题描述】:试图抓住RxSwift
并在一些事情上陷入困境。
var observedData = BehaviorSubject.from([2, 3, 4, 5, 6])
.map($0*3).subscribe(onNext:
print("HELLO", $0)
)
我如何append
给数组一个额外的值,以便再次触发subscription
?
我尝试了observedData.onNext
和observedData.accept
,但它们不起作用。
我也想知道两者的区别
var observedData = BehaviorSubject.from([2, 3, 4, 5, 6])
和
var observedData2 = BehaviorSubject<[Int]>(value: [2, 3, 4, 5, 6])
我最初认为这是写同一件事的不同方式,但我不能在 observedData2
上使用 .map
【问题讨论】:
也许你需要像***.com/questions/44832750/…这样的东西 【参考方案1】:连同@EtienneJézéquel 给出的答案......
public static func ObservableType.from(_:)
函数返回一个 Observable,而 BehaviorSubject.init(value:)
创建一个 BehaviorSubject,然后必须先将其转换为 Observable,然后才能map(_:)
它。
此外,当您意识到您没有附加到 BehaviorSubject 包含的数组,而是使用它发出一个 new 数组时,这可能有助于更好地理解。这就是为什么 Etienne 的代码首先使用 value() throws
将当前数组复制出主题并附加到副本,然后使用 onNext(_:)
将新数组推送到主题中。
最后,不要将主题设为var
s,它们应始终为let
s,因为您不想在为它们设置链后重新安装它们。
【讨论】:
【参考方案2】:类似的东西应该可以工作:
let subject = BehaviorSubject<[Int]>(value: [2, 3, 4, 5, 6])
subject.asObservable().map($0.map($0*3)).subscribe(onNext: print("HELLO", $0) ).disposed(by: disposeBag)
if var value = try? subject.value()
value.append(1)
subject.on(.next(value))
【讨论】:
以上是关于如何在 RxSwift 中将值附加到观察到的数组的主要内容,如果未能解决你的问题,请参考以下文章
在 ViewController 中可观察到的单元测试 RxSwift