Ios 联合收割机操作员?

Ios 联合收割机操作员?,ios,swift,combine,Ios,Swift,Combine,我正在寻找一个与运算符相反的运算符: 允许您从一个发射值映射到多个发射值,并在流中发射它们。例如,如果流中有元素[1,2,3],我想将其转换为一个流,该流发出1,然后2,然后3 不会更改流的完成状态。诚然,这个uncollect操作符不会与collect完全相反,因为collect等待流完成。使用uncollect时,它应该只在流未完成时处理结果,而不尝试完成/取消完成流 例如,我想这就是未收集的操作符的工作方式: func fibonacci(_ number: Int) -> An

我正在寻找一个与运算符相反的运算符:

  • 允许您从一个发射值映射到多个发射值,并在流中发射它们。例如,如果流中有元素
    [1,2,3]
    ,我想将其转换为一个流,该流发出
    1
    ,然后
    2
    ,然后
    3
  • 不会更改流的完成状态。诚然,这个
    uncollect
    操作符不会与
    collect
    完全相反,因为
    collect
    等待流完成。使用
    uncollect
    时,它应该只在流未完成时处理结果,而不尝试完成/取消完成流
例如,我想这就是
未收集的
操作符的工作方式:

func fibonacci(_ number: Int) -> AnyPublisher<Int, Never> {
  Future { ... }.eraseToAnyPublisher()
}

let serverEventStream: AnyPublisher<[Int], Never> = ...

serverEventStream              // AnyPublisher<[Int], Never>  // Ex. 2 values: `[12, 24]`, `[1, 10, 50]`
  .uncollect { $0 }            // AnyPublisher<Int, Never>    // Ex. 5 values: `12`, `24`, `1`, `10`, `50`
  .flatMap { fibonacci($0) }   // AnyPublisher<Int, Never>    // Ex. 5 values: `144`, `46368`, `1`, `55`, `12586269025`
  .sink { print($0) }

您可以将
flatMap
与新发布者一起使用

[1,2,3,4,5,6].publisher
    .collect()
    .flatMap { $0.publisher }
    .sink { print($0) }
1
2
3
4
5
六,


您可以将
flatMap
与新发布者一起使用

[1,2,3,4,5,6].publisher
    .collect()
    .flatMap { $0.publisher }
    .sink { print($0) }
1
2
3
4
5
六,


这正是我想要的。原来是我。你可能需要
flatMap(maxPublishers:1){…}
,这取决于内部发布程序的工作方式。这正是我要找的。结果是I。根据内部发布服务器的工作方式,您可能需要
flatMap(maxpublisher:1){…}