考虑以下示例:
cancellable = Just(2).map { x in
Just(x * x).delay(for: 2.0, scheduler: RunLoop.main)
}
.switchToLatest()
.sink(receiveCompletion: {_ in
print("completed")
}, receiveValue: {result in
print(result)
})
在这里,我尝试使用组合运算符来模仿著名的 switchMap 运算符的行为。我希望在两秒后完成后得到结果。事实上,既没有结果也没有完成。 这非常糟糕,因为上游已经完成了!
看起来 switchToLatest 会在上游完成后立即取消并忘记完成。
另一方面,如果我用 flatMap
替换它,一切都会按预期工作。
有合适的 switchMap 运算符的好例子吗?
免责声明:我确实了解我的上游完成情况。尽管我希望我的 switchMap 能够工作,无论我的上游是在内部发布商之前还是之后完成的。
最佳答案
您的意思不是以下内容吗(至少,据我所知,它的结果似乎是您所期望的)?
let cancellable = Just(2)
.map { x in
Just(x * x)
}
.delay(for: 2.0, scheduler: RunLoop.main)
.switchToLatest()
.sink(receiveCompletion: {_ in
print("completed")
}, receiveValue: {result in
print(result)
})
关于swift - 如何在Combine中实现正确的switchMap运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59028791/