【问题标题】:How to change thread using combine Publisher?如何使用 combine Publisher 更改线程?
【发布时间】:2019-06-11 20:14:06
【问题描述】:

我正在使用 Combine 和 SwiftUI 来做一些异步的事情,关键是我不知道如何在主线程中接收来自异步操作的响应。 apple doc 表示它可以用于 RunLoop.main,但目前在 Swift 5.0 中它不是调度程序。那么对此有什么想法吗?

我尝试按照苹果文档使用,但没有运气。

anyPublisher
    .receiveOn(on: RunLoop.main)

【问题讨论】:

  • 不确定您是否也遇到此问题,但是当我在 .subscribe(subscriber).sink(receiveValue: handler) 之前执行 receive(on: DispatchQueue.main) 时,他们没有收到输入。你遇到过吗?

标签: swift swiftui combine


【解决方案1】:

Combine - 在撰写本文时 - 尚未完全集成到 Foundation

根据 Xcode 11 Beta Release Notes

Combine 框架的 Foundation 集成不可用。以下 Foundation 和 Grand Central Dispatch 与 Combine 的集成不可用:KeyValueObserving、NotificationCenter、RunLoop、OperationQueue、Timer、URLSession、DispatchQueue、JSONEncoder、JSONDecoder、PropertyListEncoder、PropertyListDecoder 和 @Published 属性包装器。 (51241500)


根据最新的 Xcode 11 beta (2),此问题已得到修复,因此希望您的代码能够正常工作。

Combine 框架的 Foundation 集成现已推出。以下 Foundation 和 Grand Central Dispatch 与 Combine 的集成可用:KeyValueObserving、NotificationCenter、RunLoop、OperationQueue、Timer、URLSession、DispatchQueue、JSONEncoder、JSONDecoder、PropertyListEncoder、PropertyListDecoder 和 @Published 属性包装器。 (51241500)

感谢@Martin R 和@silicon_valley 提供update

【讨论】:

猜你喜欢
  • 2019-12-03
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
相关资源
最近更新 更多