簡體   English   中英

如何將值從 EnvironmentObject 傳遞到 SwiftUI 中的類實例?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM