[我有一个类,用作带有screen
变量的EnvironmentObject,我想使用它来控制用户所在的屏幕。我使用网络调用来更改此值,将到期秒数移至另一个视图,所以我需要当该值更改时,将NavigationView移至适当的屏幕。
对于这个班,我有这样的事情:
class MyClass: NSObject, ObservableObject {
@Published var screen: String? = "main"
}
对于主视图,我有这样的东西:
struct ContentView: View {
@EnvironmentObject var myClass: MyClass
var body: some View {
ZStack {
NavigationView() {
NavigationLink(destination: MainView(), tag: "main", selection: self.$myClass.screen)
{
EmptyView()
}
}
}
}
}
我似乎无法以这种方式工作。
作为解决方法,我已完成:
struct ContentView: View {
@EnvironmentObject var myClass: MyClass
var body: some View {
VStack {
if (self.myClass.screen == "main") {
MainView()
} else if (self.myClass.screen == "detail") {
DetailView()
}
}
}
但是如您所见,并不漂亮。而且在切换屏幕时我没有任何动画。
有人知道如何执行此操作或应该如何处理这种情况?
NavigationLink
比第二种解决方案更能解决问题。 或者您可以使用AnyView
:
var body: some View {
VStack {
content
}
}
var content: AnyView {
switch myClass.screen {
case "main":
return AnyView(MainView())
default:
return AnyView(DetailView())
}
}