如何将值从 EnvironmentObject 传递到 SwiftUI 中的 class 实例?
How to pass a value from an EnvironmentObject to a class instance in SwiftUI?
我正在尝试将一个名为 userSettings
的 EnvironmentObject 的值分配给一个名为 categoryData
的 class 实例,我在尝试将值分配给 class这里ObserverCategory(userID: self.userSettings.id)
错误说:
Cannot use instance member 'userSettings' within property initializer; property initializers run before 'self' is available
这是我的代码:
这是我的 class 环境对象:
//user settings
final class UserSettings: ObservableObject {
@Published var name : String = String()
@Published var id : String = "12345"
}
接下来是我尝试为其赋值的代码:
//user settings
@EnvironmentObject var userSettings: UserSettings
//instance of observer object
@ObservedObject var categoryData = ObserverCategory(userID: userSettings.id)
class ObserverCategory : ObservableObject {
let userID : String
init(userID: String) {
let db = Firestore.firestore().collection("users/\(userID)/categories") //
db.addSnapshotListener { (snap, err) in
if err != nil {
print((err?.localizedDescription)!)
return
}
for doc in snap!.documentChanges {
//code
}
}
}
}
有人可以指导我解决这个错误吗?
谢谢
因为@EnvironmentObject
和@ObservedObject
同时初始化。所以你不能用其中一个作为另一个的参数。
您可以让 ObservedObject
更懒惰。因此,当它可用时,您可以将其关联到 EnvironmentObject
。例如:
struct CategoryView: View {
//instance of observer object
@ObservedObject var categoryData: ObserverCategory
var body: some View { ,,, }
}
然后像这样传递它:
struct ContentView: View {
//user settings
@EnvironmentObject var userSettings: UserSettings
var body: some View {
CategoryView(categoryData: ObserverCategory(userID: userSettings.id))
}
}
我正在尝试将一个名为 userSettings
的 EnvironmentObject 的值分配给一个名为 categoryData
的 class 实例,我在尝试将值分配给 class这里ObserverCategory(userID: self.userSettings.id)
错误说:
Cannot use instance member 'userSettings' within property initializer; property initializers run before 'self' is available
这是我的代码:
这是我的 class 环境对象:
//user settings
final class UserSettings: ObservableObject {
@Published var name : String = String()
@Published var id : String = "12345"
}
接下来是我尝试为其赋值的代码:
//user settings
@EnvironmentObject var userSettings: UserSettings
//instance of observer object
@ObservedObject var categoryData = ObserverCategory(userID: userSettings.id)
class ObserverCategory : ObservableObject {
let userID : String
init(userID: String) {
let db = Firestore.firestore().collection("users/\(userID)/categories") //
db.addSnapshotListener { (snap, err) in
if err != nil {
print((err?.localizedDescription)!)
return
}
for doc in snap!.documentChanges {
//code
}
}
}
}
有人可以指导我解决这个错误吗?
谢谢
因为@EnvironmentObject
和@ObservedObject
同时初始化。所以你不能用其中一个作为另一个的参数。
您可以让 ObservedObject
更懒惰。因此,当它可用时,您可以将其关联到 EnvironmentObject
。例如:
struct CategoryView: View {
//instance of observer object
@ObservedObject var categoryData: ObserverCategory
var body: some View { ,,, }
}
然后像这样传递它:
struct ContentView: View {
//user settings
@EnvironmentObject var userSettings: UserSettings
var body: some View {
CategoryView(categoryData: ObserverCategory(userID: userSettings.id))
}
}