我有一个用作EnvironmentObject的类,其中有一个screen
变量,我想用它来控制用户所处的屏幕。 我使用网络调用更改此值,过期秒移动到另一个视图,因此当此值更改时,我需要我的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())
}
}