我目前正在开发一个使用NavigationStack
的应用程序。我想知道我应该把NavigationPath
变量放在哪里,这样我就可以在任何地方修改它。
我试图将它作为State
变量放在根视图中,但在嵌套很深的视图中修改它似乎很困难。
struct RootView: View {
@State var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
// ...
}
}
}
struct SubView: View {
var body: some View {
Button("Push to root") {
// how should I access `path` from here?
}
}
}
我也试着把它作为一个全局变量,但这可能会导致导航共享所有场景,这不是我的意图。
class Router: ObservableObject {
static var shared = Router()
@Published var path = NavigationPath()
}
struct RootView: View {
@ObservedObject var router = Router.shared
var body: some View {
NavigationStack(path: $router.path) {
// ...
}
}
}
struct SubView: View {
@ObservedObject var router = Router.shared
var body: some View {
Button("Push to root") {
router.path = []
}
}
}
如果有人能提供一个可行的设计或任何建议,我将不胜感激。
1条答案
按热度按时间nfs0ujit1#
使用@Binding就像你将写访问权传递给任何其他类型的@State一样。尽量不要还原到对象来解决问题,那会导致bug。