我正在尝试构建一个 Singleton ApiManager 类,它可以为我构建和发送所有 API 请求,并将响应数据发送到等待请求对象。在 SwiftUI 中,当我看到用户成功登录时,我想将视图切换到仪表板。问题是我正在使用 ObservableObject 来发布“isLoggedIn”Bool,并且我在后台线程上发出所有后端请求。我收到这个错误
[SwiftUI] 不允许从后台线程发布更改;确保在模型更新时从主线程发布值(通过像 receive(on:) 这样的运算符)。
这是我执行 API 请求的方式
func performRequest(with request: some AbstractRequest) {
var link = host + request.endpoint
appendParameters(to: &link, with: request.params)
guard let url = URL(string: link) else {
print("Failed to generate url from \(link)")
return
}
let task = URLSession.shared.dataTask(with: url){ data, response, error in
guard let data = data, error == nil else{
print("\(error?.localizedDescription ?? "")")
return
}
request.completion(data: data)
}
task.resume()
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例完成处理程序(如果你能告诉我为什么收到此警告,那就加分了
从“[LoginResponse]”到“[LoginResponse]”的条件转换始终成功
在演员线上,但如果我删除演员,它会抱怨。) …