提问者:小点点

Swiftui-EnvironmentObject向NavigationLink的选择发布了var?


我有一个用作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()
         }
      }
   }

但如你所见,并不漂亮。 我换屏幕的时候没有任何动画。

有没有人知道该怎么做或者我该怎么处理这种情况?


共1个答案

匿名用户

我认为使用NavigationLink比使用第二种解决方案更能解决问题。

或者,您可以使用anyview:

var body: some View {
    VStack {
        content
    }
}
var content: AnyView {
    switch myClass.screen {
        case "main":
            return AnyView(MainView())
        default:
            return AnyView(DetailView())
    }
}