ios - SwiftUI 可观察对象返回陈旧数据
问题描述
所以我对 SwiftUI 还是很陌生,我正在使用 Flask 的登录 API。我正在使用 ObservableObject,因为 BindableObject 已弃用。
class Auth: ObservableObject {
let objectWillChange = ObservableObjectPublisher()
var authenticated = false {
willSet{
objectWillChange.send()
}
}
func verify(username : String, password : String){
guard let url = URL(string: "MyAPIURL")
else {return}
let bodyFormat : [String:String] = ["Username":username,"Password":password]
let body = try! JSONSerialization.data(withJSONObject: bodyFormat)
var request = URLRequest(url:url)
request.httpMethod = "POST"
request.httpBody = body
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
URLSession.shared.dataTask(with: request) {
(data,response,error) in
guard let data = data else {return}
let decodedData = try! JSONDecoder().decode(UserLoginData.self, from: data)
print(decodedData.Status)
if(decodedData.Status == "Success"){
DispatchQueue.main.async {
self.authenticated = true
}
}
else{
DispatchQueue.main.async {
self.authenticated = false
}
}
}.resume()
}
}
在主视图中,我有
@ObservedObject var authenticator = Auth()
self.authenticator.verify(username: self.username, password: self.password)
print(authenticator.authenticated)
我正在打印它以检查值。现在的问题是,服务器将返回“成功”响应,但是当我这样做时,print(authenticator.authenticated)
它会打印出旧数据。当我按两次登录按钮时,它会在获取先前分配的数据时起作用。
感谢您的任何帮助!!
编辑:我注意到的一件事是该print(authenticator.authenticated)
行在该行之前被调用authenticator.authenticated
,因此它将返回它设置的最后一个值。
解决方案
只需将您的打印件移至此处:
print(decodedData.Status)
if(decodedData.Status == "Success"){
DispatchQueue.main.async {
self.authenticated = true
//-> print here
}
}
else{
DispatchQueue.main.async {
self.authenticated = false
//-> print here
}
}
推荐阅读
- linux - 在 Ansible Tower 中使用事实过滤库存的语法是什么?
- javascript - javascript转换阿塞拜疆字母大“İ”(英文“I”)错了吗?
- c# - 单元测试控制器模拟 ISession
- assembly - MIPS 汇编器更改数组
- javascript - 带有 multipart/form-data 和 @ApiImplicitBody 的 Swagger 文档
- php - 单击时如何在ajax中刷新当前弹出窗口
- java - webflux spring boot 应用程序的过滤器,返回 ResponseEntity
- html - 最小宽度和宽度适合内容不适用于文本区域或输入
- c++ - 使用中断函数将 Keil5 C 项目转换为 C++ 项目错误
- angular - JEST:如何存根在类的构造函数中调用的方法