[英]Accessing class instance in XCTest using SwiftUI and @EnvironmentObject
[英]How to pass a value from an EnvironmentObject to a class instance in SwiftUI?
我試圖分配值從EnvironmentObject叫userSettings
到名為類的實例categoryData
,試圖將值賦給類這里的時候,我得到一個錯誤ObserverCategory(userID: self.userSettings.id)
錯誤說: 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
這是我的代碼:
這是我的環境對象類:
//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))
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.