Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ObserveObject使用SwiftUI导航到不同的视图_Swift_Swiftui_Swift5 - Fatal编程技术网

使用ObserveObject使用SwiftUI导航到不同的视图

使用ObserveObject使用SwiftUI导航到不同的视图,swift,swiftui,swift5,Swift,Swiftui,Swift5,我试图创建一个逻辑,一旦用户输入了他们的凭证,它就会将用户发送到正确的视图。在登录页面中,当用户登录时,他们会获得一个可用于调用API的令牌。我把那个代币储存在钥匙链里。然后,我可以检查存储它的字段是否有一个不为null且不为空的条目,以将用户路由到主页。我用逻辑像和来引导我到正确的观点 我的内容视图代码如下: struct ContentView: View { @ObservedObject var userAuth = UserAuth() var body: some V

我试图创建一个逻辑,一旦用户输入了他们的凭证,它就会将用户发送到正确的视图。在登录页面中,当用户登录时,他们会获得一个可用于调用API的令牌。我把那个代币储存在钥匙链里。然后,我可以检查存储它的字段是否有一个不为null且不为空的条目,以将用户路由到主页。我用逻辑像和来引导我到正确的观点

我的内容视图代码如下:

struct ContentView: View {
    @ObservedObject var userAuth = UserAuth()
    var body: some View {
        if(self.userAuth.isLoggedIn){
            return AnyView(MainPageView())
        }else{
            return AnyView(AccountPageView())
        }
    }
}
UserAuth如下所示:

import Combine
class UserAuth: ObservableObject {
//    let objectWillChange = ObservableObjectPublisher()
    @Published var isLoggedIn: Bool = false;
    init() {
        let keychain = KeychainSwift()
        let userToken = keychain.get("userToken") ?? ""
        if(!userToken.isEmpty || userToken != "" ){
            self.isLoggedIn = true
        }else{
            self.isLoggedIn = false
        }
    }
}
我试图实现的总体架构是:


问题是,没有直接的方法从一个视图路由到另一个视图,因此我求助于使用ContentView中显示的逻辑。我有类似的登录逻辑。我有一个视图(loginformview),可以将您路由到登录表单视图或主页视图。但是,一旦您以登录表单登录,我就需要返回上一个视图(loginformview),在该视图中,检查是否应该返回登录页面或转到主页(这次将您发送到主页)。这似乎是非常周期性的,有人知道如何正确处理这样的逻辑吗?

我不回答你的问题,但作为一个建议,如果没有严格必要,你应该避免使用AnyView进行类型擦除。在您的情况下,在ContentView中,这是不必要的。看一看可能的副本