[英]How can I pass parameters through an @EnvironnementObject router in SwiftUI?
我正在嘗試在基於@EnvironmentObject 的 SwiftUI 應用程序中構建路由器。 問題是我有時想傳遞參數(例如對應於 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
class 注入到環境中。 在您的應用程序的@main
點,您可以像這樣完成此操作;
@main
struct RunPlanner: App {
let router = Router()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(router)
}
}
}
然后正如 Patrick Wynne 在評論中所說,您應該能夠訪問您的viewRouter.currentPage
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.