在SwiftUI中放置全局导航路径的位置

k3bvogb1  于 2022-12-17  发布在  Swift
关注(0)|答案(1)|浏览(165)

我目前正在开发一个使用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 = []
        }
    }
}

如果有人能提供一个可行的设计或任何建议,我将不胜感激。

nfs0ujit

nfs0ujit1#

使用@Binding就像你将写访问权传递给任何其他类型的@State一样。尽量不要还原到对象来解决问题,那会导致bug。

相关问题