SwiftUI - 将变量传递给 Observable 对象

Jas*_*ain 2 firebase google-cloud-firestore swiftui

我有一个视图正在从前一个视图接收 ID 值。我还需要获取该 ID 值并将其传递到 ObservableObject 中,以便我可以对该 ID 运行 Firestore 查询。我不知道如何获取 ObservableObject 的 ID。

struct ItemView: View {
   var itemName: String
   var itemID: String
   @ObservedObject var items = getItemsData()
   // ..... etc
   }


 class getItemsData() {
    @Published var data = [items]()
    init() {
       let db = Firestore.firestore()
       db.collection("items").whereField("itemID", isEqualTo: *THIS IS WHERE I NEED THE ITEMID *),addSnapshotListner {(snap, err) in ...
}
Run Code Online (Sandbox Code Playgroud)

因此,在查询调用中,我需要调用 ItemID 值来根据视图顶部定义的值进行查询。

tom*_*lly 5

我认为你的getItemsData类应该继承自 ObservableObject

class GetItemsData: ObservableObject {...}
Run Code Online (Sandbox Code Playgroud)

要将 itemId 获取到 GetItemsData 实例中,您可以向init()

class GetItemsData: ObservableObject {
    init(itemId: String) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

}

要将它们结合在一起,您有两种选择。您可以将 init 添加到您的 ItemView 中,例如:

struct ItemView: View {
    let itemName: String
    let itemModel: GetItemsData
    init(itemName: String, itemID: String) {
        self.itemName = itemName
        itemModel = GetItemsData(itemId: itemID)
    }
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢将可观察对象传递到视图中,因此它更像是 MVVM 中的视图模型

struct ItemView: View {
    let itemName: String
    let itemModel: GetItemsData
Run Code Online (Sandbox Code Playgroud)

  • SwiftUI 视图不应初始化对象,除非您的属性包装它们,否则它们会丢失,因为视图结构不会保留 (3认同)