使用ObservableObject关键字

问题描述

如何使用ObservableObject关键字将数据移动到其他屏幕? 我将第一页上的数据保存到使用关键字Publisher创建的变量中,但无法访问第二页上的数据。

用户模型

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来访问从ContentViewDetailView的数据。

为此,您必须将NavigationLink的目的地设置为:

destination: DetailView().environmentObject(userStore)

然后您可以像这样从DetailView访问它:

@EnvironmentObject var user: UserDataStore

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...