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
}
如何将数据传递给视图并直接在“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
}