如何使用ObservableObject关键字将数据移动到其他屏幕?我将第一页上的数据保存到使用关键字Published创建的变量中,但无法访问第二页上的这些数据。
用户模型
import Combine
struct User: Codable, Identifiable {
var id = UUID()
var name: String
var surName: String
}
用户数据存储
import Combine
class UserDataStore: ObservableObject {
@Published var users: [User] = []
}
内容视图
我通过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")
}
})
}
}
}
}
详细信息视图
在详细信息页面上,我尝试查看录制的信息,但无法查看。
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