如何将值附加到 RxSwift 中观察到的数组

How do I append values fo an observed array in RxSwift

试图掌握 RxSwift 并卡在一些事情上。

var observedData = BehaviorSubject.from([2, 3, 4, 5, 6])
    .map({[=10=]*3}).subscribe(onNext: {
        print("HELLO", [=10=])
    })

如何 append 数组的额外值,以便再次触发 subscription

我尝试了 observedData.onNextobservedData.accept 但它们不起作用。

我也想知道

的区别
var observedData = BehaviorSubject.from([2, 3, 4, 5, 6])

var observedData2 = BehaviorSubject<[Int]>(value: [2, 3, 4, 5, 6])

我一开始以为是写同一件事的不同方式,但我不能在 observedData2

上使用 .map

类似的东西应该可以工作:

let subject = BehaviorSubject<[Int]>(value: [2, 3, 4, 5, 6])
subject.asObservable().map({[=10=].map({[=10=]*3})}).subscribe(onNext: { print("HELLO", [=10=]) }).disposed(by: disposeBag)
if var value = try? subject.value() {
    value.append(1)
    subject.on(.next(value))
}

连同@EtienneJézéquel 给出的答案...

public static func ObservableType.from(_:)函数returns一个Observable,而BehaviorSubject.init(value:)创建一个BehaviorSubject,然后必须先将其转换为Observable,然后才能map(_:)它。

此外,当您意识到您没有附加到 BehaviorSubject 包含的数组,而是使用它发出一个 new 数组时,可能有助于更好地理解。这就是为什么 Etienne 的代码首先使用 value() throws 从主题中复制当前数组并附加到副本,然后使用 onNext(_:).

将新数组推送到主题中

最后,不要让主题 vars 它们应该始终是 lets 因为你不想在设置它们的链后重新安置它们。