DispatchQueue.main.async не возвращается в основной поток - SwiftUI

struct ContentView: View {
    @State var manager = HtpAuth()
    
    var body: some View {
    
        if manager.authenticated {
            Text("Login Successful!!")
        }

        // 2 textfields for username and password and 
        // a login button to call checkForAuth function
        //...
    }
}

class HttpAuth: ObservableObject {
    var didChange = PassthroughSubject<HttpAuth, Never>()

    var authenticated = false {
        didSet {
            didChange.send(self)
        }
    }

    func checkForAuth(username: String, password: String) {

        //REST API call
        URLSession.shared.data.task(with: loginRequest) { data, response, error in 
            guard let data = data else { return }
            let finalData = try! JSONDecoder().decode(ServerMessage.self, from: data)
    
            DispatchQueue.main.async {
                self.authenticated = true
            }
        }.resume()
    }
}

Я получаю ответ от сервера. Но после получения ответа я хочу вернуться к основному потоку, чтобы отобразить другое представление. Я используюDispatchQueue.main.asyncдля этого, но это не работает. Ярлык "Вход выполнен успешно!!" никогда не появляется после успешного входа в систему.

1 ответ

Решение

Используйте вместо стандартного Published а также ObservedObject обертки, как показано ниже

struct ContentView: View {
    @ObservedObject var manager = HtpAuth()   // use @StateObject in SwiftUI 2

    ...
    

class HttpAuth: ObservableObject {
    @Published var authenticated = false
    ...
Другие вопросы по тегам