RxSwift:当源完成时,groupBy是否应该完成对其每个GroupedObservable的发送?

时间:2018-04-25 08:08:51

标签: swift rx-swift

以下代码似乎永远不会起作用,因为这些组似乎没有终止,而takeLast()不知道最后一个是什么:

observableSequence
  .groupBy { $0.key }
  .map { groups in
    groups
    .takeLast(1)
    .subscribe(onNext: { element in
      print(element)
    })
    .disposed(by: self.disposeBag)
  }
  .subscribe()
  .disposed(by: self.disposeBag)

2 个答案:

答案 0 :(得分:0)

答案是肯定的。

    Observable.from([1,2,3,4,5,6,7,8])
        .groupBy { ($0 % 2) == 0 }
        .subscribe(onNext: { group in
            group
                .takeLast(1)
                .subscribe(onNext: { e in
                    print(e)
            })
            .disposed(by: self.disposeBag)
        })
    .disposed(by: self.disposeBag)

以上代码输出:

7

8

答案 1 :(得分:0)

我仍然无法获得原始更复杂的版本,但我发现了另一个更好的解决方案,即颠倒序列的顺序并使用take()而不是takeLast()。这是有效的,所以我认为序列没有终止(虽然我不明白为什么不这样做。)

无论如何,如果可以,最好采取take()而不是takeLast()。