如何通过SwiftUI中的@EnvironnementObject路由器传递参数?



我正在尝试在我的SwiftUI应用程序中构建一个基于@EnvironmentObject的路由器。问题是,我有时想传递参数(例如,对应于ID),以便专门为传递的参数访问视图。

路由器是这样的:

import SwiftUI
enum Route {
case Index(objectId: String?)
case User(objectId: String?)
case Page(objectId: String?)
}
class Router: ObservableObject  {
@Published var currentPage: Route = .Index(objectId: "")
}

然后我使用@Published值来更新我的currentPage变量并更新当前视图。这里是我想传递的参数

Button(action: { viewRouter.currentPage = .Page(objectId: id) }) {
...
}

然后在我的页面视图(这是新的当前页面),我想使用这个参数:

import SwiftUI
struct PageView: View {
@EnvironmentObject var viewRouter: Router
var objectId: String?
var body: some View {
Text("Page (objectId)")
}
}

我该怎么做呢?我对参数的理解完全错了吗?我真的不明白为什么我的参数是空的。

谢谢。

我没有看到在您的代码示例中,您将Router类注入环境。在你的应用程序的@main点,你可以这样做:

@main
struct RunPlanner: App {
let router = Router()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(router)
}
}
}

那么正如Patrick Wynne在评论中所说,你应该能够访问你的viewRouter.currentPage属性。

最新更新