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()是什么类型的对象?我刚刚更新了我的问题