Так что я довольно новичок в SwiftUI и возиться с API входа в систему с Flask. Я использую 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)
, он напечатает более старые данные. Когда я дважды нажимаю кнопку «Вход», она работает так же, как и предыдущие назначенные данные.
Спасибо за любую помощь !!
РЕДАКТИРОВАТЬ: Одна вещь, которую я заметил, заключается в том, что * Строка 1012 * вызывается перед строкой authenticator.authenticated
и, таким образом, возвращает последнее значение, которое было установлено.