【发布时间】:2020-03-07 22:20:58
【问题描述】:
我使用以下代码在 Swift Combine 中创建了一个返回自定义发布者的函数:
func customPubliher() -> AnyPublisher<Bool, Never> {
return Future<Bool, Never> { promise in
promise(.success(true))
}.eraseToAnyPublisher()
}
然后我使用以下代码订阅了这个发布者:
customPublisher()
.subscribe(on: DispatchQueue.global())
.map { _ in
print(Thread.isMainThread)
}
.sink(receiveCompletion: { _ in }, receiveValue: { value in
// Do something with the value received
}).store(in: &disposables)
但即使我在订阅时添加了.subscribe(on: DispatchQueue.global()) 行,代码不会在不同的队列中执行(.map 中的print 输出为真)。
但是,如果我将自定义发布者替换为内置的组合发布者之一,例如 Just()(见下文),则相同的代码将在不同的队列上正常执行:
Just(true)
.subscribe(on: DispatchQueue.global())
.map { _ in
print(Thread.isMainThread)
}
.sink(receiveCompletion: { _ in }, receiveValue: { value in
// Do something with the value received
}).store(in: &disposables)
上面代码中的.map 输出错误。
我在使用自定义发布者时做错了什么?我希望它在不同的队列上运行,就像 Just() 发布者一样。
【问题讨论】:
-
您的代码在 Playground 中按预期工作