通过取第一个元素将 Observable<[T]> 转换为 Observable<T> 的 RxSwift 运算符

RxSwift operator for transforming Observable<[T]> to Observable<T> by taking first element

目前我在做这样的事情:

Observable.just([1, 2, 3, 4])
  .flatMapLatest {
    numbers in
    guard number = numbers.first else {
      return Objservable.empty()
    }
    return Observable.just(number)
  }

是否有更惯用的方法或我可以使用的任何预建运算符?

您的实现方式完全正确。我只是用 flatMap 代替 flatMapLatest 因为它是一个更通用的运算符,我们不需要 flatMapLatest.

的特殊逻辑

您可以创建自己的运算符来应用于类型为 Collection 的可观察对象。

extension Observable where Element : Collection {
  func mapFirst() -> Observable<Element.Iterator.Element> {
    return self.flatMap { elements in
      guard number = numbers.first else {
        return Objservable.empty()
      }
      return Observable.just(number)
    }
  }
}

你的方案很好,你可以eg.将它移到扩展中,它会更通用。 但是,如果您真的想以其他方式执行此操作:您可以查看 RxOptionals 并像这样使用它:

Observable.just([1, 2, 3, 4])
        .filterEmpty()
        .map { [=10=].first }
        .filterNil()