【问题标题】:How do I append values fo an observed array in RxSwift如何在 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.onNextobservedData.accept,但它们不起作用。

我也想知道两者的区别

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

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

我最初认为这是写同一件事的不同方式,但我不能在 observedData2 上使用 .map

【问题讨论】:

标签: arrays swift rx-swift behaviorsubject


【解决方案1】:

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

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

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

最后,不要将主题设为vars,它们应始终为lets,因为您不想在为它们设置链后重新安装它们。

【讨论】:

    【解决方案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))
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      相关资源
      最近更新 更多