Change the root view of UIHostingController in SwiftUI

前端 未结 5 924
情歌与酒
情歌与酒 2020-12-03 07:19

For a new SwiftUI iOS app, I do the following in the SceneDelegate

if let windowScene = scene as? UIWindowScene {
    let window =          


        
5条回答
  •  一向
    一向 (楼主)
    2020-12-03 07:58

    Very good answer LuLugaga, updated if you don't want to use @Observablebject so will not keep updating all the time, you can use Subject, as soon as you update token String, RootView will update.

    struct RootView: View {
    
        var loginViewModel: LoginViewModel = LoginViewModel()
    
        @State var tokenString = ""
    
        var body: some View {
            Group {
                tokenString.count > 0 ? AnyView(ContentView(model: playerViewModel)) :  AnyView(LoginView(loginViewModel: loginViewModel))
            }.onReceive(loginViewModel.tokenString) {
                self.tokenString = $0
            }
        }
    }
    
    
    class LoginViewModel {
    
        let tokenString = PassthroughSubject()
    
        var token: String {
            get { return "" }
        set {
            self.tokenString.send(newValue)
        }
    }
    

提交回复
热议问题