使用 ObservableObject 关键字传递数据
Passing data with ObservableObject keyword
如何使用 ObservableObject 关键字将数据移动到其他屏幕?
我将第一页的数据保存到我用关键字 Published 创建的变量中,但我无法在第二页访问此数据。
用户模型
import Combine
struct User: Codable, Identifiable {
var id = UUID()
var name: String
var surName: String
}
UserDataStore
import Combine
class UserDataStore: ObservableObject {
@Published var users: [User] = []
}
ContentView
我使用 contentView 屏幕上的 TextField 对象从用户处获取信息。按下按钮后,我将其添加到 UserDataStore 中的数组中。我重定向到详细信息页面。
struct ContentView: View {
@State var name: String = ""
@State var surName: String = ""
@State var user = User(name: "", surName: "")
@State var show: Bool = false
@ObservedObject var userStore = UserDataStore()
var body: some View {
NavigationView {
VStack(spacing: 50) {
TextField("isim", text: $name)
TextField("soyİsim", text: $surName)
NavigationLink(
destination: DetailView(),
isActive: $show,
label: {
Button(action: {
self.user.name = name
self.user.surName = surName
self.userStore.users.append(user)
self.show = true
}) {
Text("Kaydet")
}
})
}
}
}
}
DetailView
在详情页面,我尝试查看记录的信息,但是我不能。
struct DetailView: View {
@ObservedObject var user = UserDataStore()
var body: some View {
ForEach(user.users) { item in
Text("\(item.name)")
}
}
}
就像@“New Dev”解释的那样,您正在初始化 UserDataStore
的新实例,因此无法从 DetailView
.
访问您的数据
您可以使用 EnvironmentObject
访问从 ContentView
到 DetailView
的数据。
为此,您必须将 NavigationLink
的目的地设置为:
destination: DetailView().environmentObject(userStore)
然后您可以像这样从 DetailView 访问它:
@EnvironmentObject var user: UserDataStore
如何使用 ObservableObject 关键字将数据移动到其他屏幕? 我将第一页的数据保存到我用关键字 Published 创建的变量中,但我无法在第二页访问此数据。
用户模型
import Combine
struct User: Codable, Identifiable {
var id = UUID()
var name: String
var surName: String
}
UserDataStore
import Combine
class UserDataStore: ObservableObject {
@Published var users: [User] = []
}
ContentView
我使用 contentView 屏幕上的 TextField 对象从用户处获取信息。按下按钮后,我将其添加到 UserDataStore 中的数组中。我重定向到详细信息页面。
struct ContentView: View {
@State var name: String = ""
@State var surName: String = ""
@State var user = User(name: "", surName: "")
@State var show: Bool = false
@ObservedObject var userStore = UserDataStore()
var body: some View {
NavigationView {
VStack(spacing: 50) {
TextField("isim", text: $name)
TextField("soyİsim", text: $surName)
NavigationLink(
destination: DetailView(),
isActive: $show,
label: {
Button(action: {
self.user.name = name
self.user.surName = surName
self.userStore.users.append(user)
self.show = true
}) {
Text("Kaydet")
}
})
}
}
}
}
DetailView
在详情页面,我尝试查看记录的信息,但是我不能。
struct DetailView: View {
@ObservedObject var user = UserDataStore()
var body: some View {
ForEach(user.users) { item in
Text("\(item.name)")
}
}
}
就像@“New Dev”解释的那样,您正在初始化 UserDataStore
的新实例,因此无法从 DetailView
.
您可以使用 EnvironmentObject
访问从 ContentView
到 DetailView
的数据。
为此,您必须将 NavigationLink
的目的地设置为:
destination: DetailView().environmentObject(userStore)
然后您可以像这样从 DetailView 访问它:
@EnvironmentObject var user: UserDataStore