【发布时间】:2020-05-29 16:13:58
【问题描述】:
我正在尝试建立一个发布者来发布一组整数,并且在某些时候可能会失败。它有点做作,但希望能说明原理。下面的例子。
enum NumberError: Int, Error {
case isFatal, canContinue
}
struct Numbers {
let p = PassthroughSubject<Int, NumberError>()
func start(max: Int) {
let errorI = Int.random(in: 1...max)
for i in (1...max) {
if errorI == i {
p.send(completion: .failure(NumberError.canContinue))
} else {
p.send(i)
}
}
p.send(completion: .finished)
}
}
然后我使用以下方式订阅:
let n = Numbers()
let c = n.p
.catch {_ in return Just(-1)}
.sink(receiveCompletion: {result in
switch result {
case .failure:
print("Error")
case .finished:
print("Finished")
}
}, receiveValue: {
print($0)
})
n.start(max: 5)
这可以用 -1 替换错误,但我想继续接收值。有谁知道这是否可能? 阅读并环顾四周,似乎 flatMap 可能是要走的路,但我无法确定在闭包中使用哪个发布者?非常感谢任何帮助。
【问题讨论】: