Ios 使用SwiftUI将用户从登录屏幕带到另一屏幕?

Ios 使用SwiftUI将用户从登录屏幕带到另一屏幕?,ios,swift,swiftui,Ios,Swift,Swiftui,我试图找出将用户从登录屏幕带到另一屏幕的最佳方式。 这就是我到目前为止所做的: struct ContentView: View { @EnvironmentObject var userManager: UserManager var body: some View { VStack { if userManager.user == nil { SignInView() } else { Main

我试图找出将用户从登录屏幕带到另一屏幕的最佳方式。 这就是我到目前为止所做的:

struct ContentView: View {
  @EnvironmentObject var userManager: UserManager

    var body: some View {
      VStack {
        if userManager.user == nil {
          SignInView()
        } else {
          MainView().transition(.slide)
        }
      }
    }
}
最初的想法是
userManager.user
将是
nil
,因此我将显示
符号视图
。当用户登录时,
user
属性将更新,并且由于它是
@已发布的
,因此
ContentView
主体应在主视图中滑动

这是正确的方法吗?我也没有看到主视图滑入。相反,它只是出现在屏幕上

谢谢


[更新]

这是主视图

struct MainView: View {
  @EnvironmentObject var userManager: UserManager

    var body: some View {
      NavigationView {
        if self.userManager.user != nil {
          List(...) { 
            ...
      }
    } else {
      Text("No User")
    }

  }
}

}以下是一个示例项目。您会发现过渡需要一个动画块,以使其以理想的方式工作

class UserManager: ObservableObject{
@Published var user : String?
}

struct ContentView: View {

 @EnvironmentObject var userManager: UserManager

var body: some View {
    VStack{

     if userManager.user == nil {
        SignInView(user: $userManager.user).animation(nil)
        }
     else{
        MainView().environmentObject(userManager).animation(Animation.spring().speed(1.0)).transition(.move(edge: .trailing))
        }
  }
}
}

struct SignInView: View {
@Binding var user: String?

var body: some View {
    Button("adding a user", action: {
        self.user = " test"
    }
    )
}
}

struct MainView: View {
@EnvironmentObject var userManager: UserManager

var body: some View {
  VStack {
    if self.userManager.user != nil {
        List(0..<10) {
            Text(self.userManager.user! + "\($0)")
      }
} else {
  Text("No User")
}
 }
  }}
class用户管理器:observeObject{
@发布的var用户:字符串?
}
结构ContentView:View{
@环境对象变量userManager:userManager
var body:一些观点{
VStack{
如果userManager.user==nil{
SignInView(用户:$userManager.user).动画(无)
}
否则{
MainView().environmentObject(userManager).动画(animation.spring().speed(1.0)).transition(.move(edge:.training))
}
}
}
}
结构符号视图:视图{
@绑定变量用户:字符串?
var body:一些观点{
按钮(“添加用户”,操作:{
self.user=“测试”
}
)
}
}
结构主视图:视图{
@环境对象变量userManager:userManager
var body:一些观点{
VStack{
如果self.userManager.user!=nil{

列表(0..MainView()是什么类型的对象?我刚刚更新了我的问题