2
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为此目的使用,但它不起作用。标签“登录成功!!” 成功登录后永远不会出现。

4

1 回答 1

2

改用标准PublishedObservedObject包装器,如下所示

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

    ...
    

class HttpAuth: ObservableObject {
    @Published var authenticated = false
    ...
于 2020-07-04T10:38:55.280 回答