View SwiftUI访问在SCSTRUCT标头中传递的视图数据
如何将数据传递给视图并在“标题”中直接使用它?我制作的所有教程都是访问视图主体中的数据-这很好-但是我想从UpdateAccountView调用GraphQL方法,然后根据结果渲染视图 传递数据的我的类:View SwiftUI访问在SCSTRUCT标头中传递的视图数据,view,graphql,swiftui,parameter-passing,View,Graphql,Swiftui,Parameter Passing,如何将数据传递给视图并在“标题”中直接使用它?我制作的所有教程都是访问视图主体中的数据-这很好-但是我想从UpdateAccountView调用GraphQL方法,然后根据结果渲染视图 传递数据的我的类: class Account { var tel: Int init(tel: Int) { self.tel = tel } } 初始化类的主要视图(简化-通常“tel”来自输入) 我调用的视图执行请求并基于结果调用下一个视图 UpdateA
class Account {
var tel: Int
init(tel: Int) {
self.tel = tel
}
}
初始化类的主要视图(简化-通常“tel”来自输入)
我调用的视图执行请求并基于结果调用下一个视图
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()
}
}
}
错误:
无法在属性初始值设定项中使用实例成员“帐户”;属性初始值设定项在“self”可用之前运行
更新方法(GraphQL):
我看到有一个EnvironmentObject,但据我所知,该变量在全局范围内可用,这在这里是不必要的。
谢谢您的帮助。您可以在explicit
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
}
struct UpdateAccountView:View{
var账户:账户
@ObservedObject私有变量updateAccount:updateAccount//
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
}
}
}
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
}