hop*_*opy 4 publisher swift combine
我们知道Combine中的Empty Publisher会立即触发完成事件\xef\xbc\x9a
\nEmpty<Void,Never>()\n .sink {\n print("completion: \\($0)") // will print!\n } receiveValue: {}\n
Run Code Online (Sandbox Code Playgroud)\n但是 flatMap 返回的 Empty Publisher 不会触发完成事件:
\nvar subs = Set<AnyCancellable>()\nlet p0 = PassthroughSubject<[Int],Error>()\nlet p1 = p0\n .flatMap {_ in\n Empty<Void,Never>() // same Empty Publisher\n }.eraseToAnyPublisher()\n\np1\n .sink {\n print("completion: \\($0)") // but NOT print!\n } receiveValue: {}\n .store(in: &subs)\n\np0.send([1,2,3])\n
Run Code Online (Sandbox Code Playgroud)\n这是为什么???我是不是错过了什么???谢谢!;)
\nFlatMap
按以下方式工作:为每个上游值创建一个发布者。下游接收所有这些 FlatMap 创建的发布者发出的所有值。
当上游完成时它完成,或者如果上游出错或任何创建的发布者出错则出错。
因此,在您的情况下,对于您的单个上游值,[1,2,3]
您会发出一个Empty
发布者(已完成),但由于尚未完成,因此没有整体完成PassthroughSubject
。
p0.send([1,2,3])
p0.send(completion: .finished)
Run Code Online (Sandbox Code Playgroud)
以上将完成整个管道。
归档时间: |
|
查看次数: |
1470 次 |
最近记录: |