簡體   English   中英

如何通過 SwiftUI 中的 @EnvironnementObject 路由器傳遞參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM