【发布时间】:2023-03-10 14:20:01
【问题描述】:
所以我对 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 行之前被调用,因此它将返回它设置的最后一个值。
【问题讨论】:
-
如果建议的解决方案对您不起作用,那么原因也在于其他一些未提供的代码。