使用ObservableObject关键字传递数据



如何使用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访问从ContentViewDetailView的数据。

为了做到这一点,您必须将NavigationLink的目的地设置为:

destination: DetailView().environmentObject(userStore)

然后你可以从DetailView访问它,如下所示:

@EnvironmentObject var user: UserDataStore

相关内容

  • 没有找到相关文章

最新更新