簡體   English   中英

如何從 Swift 和 Firebase 中的子節點獲取數據數組?

[英]How to get array of data from a child node in Swift and Firebase?

我正在開發一個 Swift/SwiftUI 應用程序並使用 Firebase 的實時數據庫進行數據存儲。

目前,我一直在嘗試獲取數據庫中特定孩子的數據。 我嘗試了在 StackOverflow 上找到的多種解決方案,但對我來說,它總是空無一物。

這是我對數據庫的當前結構:

在此處輸入圖像描述

我試圖用代碼做的是,一旦我輸入一個列表,我想使用 listID(與 key 相同)來提取屬於這個列表的所有項目。

我最近的方法如下:

var listItems: [String] = []

class FirebaseSession: ObservableObject {
        @Published var listItems: [String] = []
        var ref: DatabaseReference = Database.database().reference()
    

    func getSingleList(id: String) {
        ref.child("Lists").child("\(id)".child("listItems").observe(DataEventType.value) { (snapshot) in
            self.listItems = []
            for child in snapshot.children {
                if let snapshot = child as? DataSnapshot
                    {
                    self.listItems.append(snapshot.key)
                }
            }
        }
    }
}

struct ListView: View {
    
    @ObservedObject var session = FirebaseSession()
        
    
    var body: some View {
        VStack {
            ...
        }
         .onAppear() {
           session.getSingleList(id: self.listId)

         }
}

但是,每當我運行此代碼時,我的 listItems 變量始終為空。

任何幫助是極大的贊賞!

到目前為止,我已經能夠找到解決方法。

我沒有使用 listID 發出請求,而是在 init() 上加載所有記錄,然后使用該存儲的變量來過濾相關記錄。

    func getLists() {
        ref.child("Lists").observe(DataEventType.value) { (snapshot) in
            self.listItems = []
            for child in snapshot.children {
                if let snapshot2 = child as? DataSnapshot
                {
                    let listId = snapshot2.key
                    let childSnapshot = snapshot2.childSnapshot(forPath: "listItems")
                    for child2 in childSnapshot.children {
                        if let snapshot3 = child2 as? DataSnapshot {
                            let itemId = snapshot3.key
                            let newRow = leagueSearch(listId: listId,
                                                      itemId: itemId)
                            self.listItems.append(newRow)
                        }
                    }
                }
            }
        }
    }


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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