Combine网络编程与错误处理全解析
1. 多线程处理
在构建访问网络的Combine管道时,可能会在Xcode的控制台输出中看到如下错误信息:
[SwiftUI] Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.
有时,Xcode会在代码编辑器中显示紫色警告,方便找到有问题的代码。
出现此错误信息的原因是 URLSession 会在后台线程执行网络请求。请求完成后, dataTaskPublisher 会将请求结果事件发送到管道。我们的代码获取该结果,将其映射为UI所需的数据类型,并将其赋值给视图模型的某个 @Published 属性,这会促使SwiftUI用属性的新值更新UI。而这一切都发生在同一个线程——后台线程上。但不建议从后台线程访问UI,这就是SwiftUI发出警告的原因。
为防止这种情况发生,我们需要指示Combine在收到网络请求结果后切换到前台线程。可以使用 receive(on:) 操作符来让Combine在特定线程接收事件,示例代码如下:
private lazy var isUsernameAvailablePublish
超级会员免费看
订阅专栏 解锁全文
2236

被折叠的 条评论
为什么被折叠?



