我正在为我的SwiftUI应用程序编写一个路由器,我在视图之间共享共享注册表单数据时遇到了麻烦。
这是我的路由器
struct ScanningFlowRouter: Routing {
func view(for route: ScanningFlowRoute) -> some View {
var nextView: AnyView
switch route {
case .home:
nextView = AnyView(Landing(startScanningFlow: .constant(false), scanningFlowRouter: self))
case .name_email:
nextView = AnyView(NameEmail(scanningFlowRouter: self))
}
return nextView
}
}
以及NavigationLink
NavigationLink(
destination:
scanningFlowRouter.view(for: .name_email),
isActive: $startScanningFlow,
label: {
EmptyView()
}
)
渲染NavigationView
和NavigationLink
的视图通过.environmnetObject(formData: formData)
传递了一个环境对象,但是我得到了一个错误,即NameEmail
视图没有对环境的引用。当我向路由器添加一个环境(编辑env使其成为共享单例)时,如
return nextView.environmentObject(FormData.shared)
...我的导航不再工作,屏幕什么也不做。
有人知道发生了什么吗?
1条答案
按热度按时间nimxete21#
我可以展示一些不同于路由器的导航风格(这对我来说不是很容易理解:),这是如何处理我们的内容的例子之一。
我更喜欢使用一些基本的内容管理器。例如,在中的开头,您可以使用以下内容:
在你的内容视图中实现这样的东西。我喜欢它的环境灵活性。
因此,在您的逻辑中,您可以更改内容状态,例如成功登录后。
请注意,我们从一开始就有NavigationView,所以接下来的任何地方都可以将NavigationLinks放在您想要的地方。此外,我们可以在应用程序中为一些视图实现类似的“管理器”。