[英]How to pass a value from an EnvironmentObject to a class instance in SwiftUI?
I'm trying to assign the value from an EnvironmentObject called userSettings
to a class instance called categoryData
, I get an error when trying to assign the value to the class here ObserverCategory(userID: self.userSettings.id)
我试图分配值从EnvironmentObject叫
userSettings
到名为类的实例categoryData
,试图将值赋给类这里的时候,我得到一个错误ObserverCategory(userID: self.userSettings.id)
Error says: Cannot use instance member 'userSettings' within property initializer; property initializers run before 'self' is available
错误说:
Cannot use instance member 'userSettings' within property initializer; property initializers run before 'self' is available
Cannot use instance member 'userSettings' within property initializer; property initializers run before 'self' is available
Here's my code:这是我的代码:
This is my class for the environment object:这是我的环境对象类:
//user settings
final class UserSettings: ObservableObject {
@Published var name : String = String()
@Published var id : String = "12345"
}
And next is the code where I'm trying to assign its values:接下来是我试图分配其值的代码:
//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
}
}
}
}
Can somebody guide me to solve this error?有人可以指导我解决这个错误吗?
Thanks谢谢
Because the @EnvironmentObject
and @ObservedObject
are initializing at the same time.因为
@EnvironmentObject
和@ObservedObject
同时初始化。 So you cant use one of them as an argument for another one.因此,您不能将其中一个用作另一个的论据。
You can make the ObservedObject
more lazy.你可以让
ObservedObject
更懒惰。 So you can associate it the EnvironmentObject
when it's available.因此,您可以在它可用时将其与
EnvironmentObject
相关联。 for example:例如:
struct CategoryView: View {
//instance of observer object
@ObservedObject var categoryData: ObserverCategory
var body: some View { ,,, }
}
Then pass it like:然后像这样传递它:
struct ContentView: View {
//user settings
@EnvironmentObject var userSettings: UserSettings
var body: some View {
CategoryView(categoryData: ObserverCategory(userID: userSettings.id))
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.