SwiftUI 访问在 sstruct header 中传递了视图数据

SwiftUI access passed view data in sctruct header

如何将数据传递给视图并直接在“header”中使用它?我制作的所有教程都在访问视图中的数据 body - 这工作正常 - 但我想从 UpdateAccountView 调用 graphlql 方法,而不是根据结果呈现视图。

我的class用于传递数据:

class Account {
    var tel: Int
    
    init(tel: Int) {
        self.tel = tel
    }
}

我的 class 初始化主视图(简化 - 通常“电话”来自输入)

struct ContentView: View {

        var account: Account = Account(tel: 123)
        var body: some View {
             NavigationView {
                   NavigationLink(
                        destination: UpdateAccountView(account: account),
                        label: {
                            Text("Navigate")
                        })
             }
         }
}

        

我调用的视图做请求,根据结果调用下一个视图 UpdateAccount 将 tel:Int 作为参数。 这就是问题所在。我无法从传递的数据访问 account.tel。

struct UpdateAccountView: View {
     var account: Account
     @ObservedObject private var updateAccount: UpdateAccount = UpdateAccount(tel: account.tel)

     @ViewBuilder
     var body: some View {
        if updateAccount.success {
              AccountVerifyView()
        } else {
              ContentView()
        }
     }
} 

错误:

Cannot use instance member 'account' within property initializer; property initializers run before 'self' is available

更新方法(GraphQL):

class UpdateAccount: ObservableObject {
   @Published var success: Bool
   init(tel: Int){
       self.success = false
       update(tel: tel)
    
   }
   func update(tel: Int){
      Network.shared.apollo.perform(mutation: UpdateAccountMutation(tel: tel)) { result in
      switch result {
      case .success(let graphQLResult):
        self.success = graphQLResult.data!.updateAccount.success
        
      case .failure(let error):
        print("Failure! Error: \(error)")
        self.success = false
        }
      }
}

我看到有一个 EnvironmentObject,但据我所知,该变量在全球范围内可用,这在这里不是必需的。 谢谢你的帮助。

你可以明确地init,比如

struct UpdateAccountView: View {
     var account: Account
     @ObservedObject private var updateAccount: UpdateAccount  // << declare

     init(account: Account) {
        self.account = account
        self.updateAccount = UpdateAccount(tel: account.tel)   // << here !!
     }

     // ... other code
}