मेरे पास फायरस्टोर में सहेजा गया एक दस्तावेज़ है जो नीचे जैसा दिखता है:

ArtistsUID: 7aPKTNRh5vdbFiEBKIPjhpCBDno1
DisplayName: iservetheface
LookName: HuhhInv
MediaURL: >-
    https:/firebasestorage.googleapis.com/v0/b/beautyboard-
    fcf88.appspot.com/o/looks_media%2FHuhh%20In%20v_7aPKT_24:
    alt=media&token=e846db3a-bb52-4925-9526-43334bbe9145
ProductsUsed:
    Contour:
        - Contour
        - hbbgch
        - bbbb
    Dry Shampoo:
        - Dry Shampoo
        - bcnbbg
        - cbbb
    Lashes:
        - Lashes
        - tatti
        - ngnnn
    TimeStamp: 'November 24,2020 at 11:44:18 PM UTC'

हालांकि मुझे यकीन नहीं है कि इसे मेरे कोड में तेजी से कैसे पढ़ा जाए। मेरे पास पहले से परिभाषित एक संरचना है

struct LooksToAppend{
    let uid: String
    let DisplayName: String
    let LookName: String
    let MediaURL: String
    let TimeStamp: Date
    let ProductsUsed: [String:[String]]
    
    init(dictionary: [String: Any]) {
        self.uid = dictionary["ArtistsUID"] as?String ?? ""
        self.DisplayName = dictionary["DisplayName"] as?String ?? ""
        self.LookName = dictionary["LookName"] as?String ?? ""
        self.MediaURL = dictionary["MediaURL"] as?String ?? ""
        self.TimeStamp = dictionary["TimeStamp"] as?Date ?? Date()
        self.ProductsUsed = dictionary["ProductsUsed"] as?Dictionary<String, Array<String>> ?? ["":["","",""]]
    }
}

चूंकि फायरस्टोर में उत्पाद का उपयोग मानचित्र डेटा प्रकार के रूप में सहेजा जाता है और टाइमस्टैम्प एक टाइमस्टैम्प है, मुझे यकीन नहीं है कि उन्हें वापस कैसे पढ़ा जाए क्योंकि जब वे वापस आते हैं तो वे मेरे कार्यक्रम में खाली होते हैं।

मैं डेटा प्राप्त करने के लिए निम्न कोड का उपयोग करता हूं:

func LoadData() {
    db.collection("looks").getDocuments(){
        QuerySnapshot, error in
        if let error = error{
            print("Error loading")
            print("\(error.localizedDescription)")
        }
        else{
            self.LooksArray = QuerySnapshot!.documents.compactMap({LooksToAppend(dictionary: $0.data())})
            DispatchQueue.main.async {
                self.LooksArray.shuffle()
                self.LooksTableView.reloadData()
            }
        }
    }
0
Scott 26 नवम्बर 2020, 02:22

1 उत्तर

सबसे बढ़िया उत्तर

मानचित्र फ़ील्ड मूल रूप से key-value जोड़े हैं जो आपके फायरबेस दस्तावेज़ में एम्बेडेड ऑब्जेक्ट का प्रतिनिधित्व करते हैं।

{a: "dfga", b: "bsaz"}
{b: "aaad", c: "badz"}
{c: "aaad"}

आपके ProductsUsed का आउटपुट कैसा दिखता है? मेरी समझ से, compactMap() विधि आउटपुट में कुछ फ़िल्टरिंग लागू करके काम करती है और किसी भी "शून्य" मान को छोड़ दिया जाता है। यह समझा सकता है कि आपका आउटपुट खाली क्यों लौटाया गया है। इसके बजाय आप map() का उपयोग करना बेहतर समझ सकते हैं।

let products = {
    "product1": [1, 2, 3],
    "product2": [1, 2, 4]
};

let mapped = products.map { $0.value }
// [[1, 2, 3], [1, 2, 4]] : An array of arrays

print(mapped)
0
Andrew 3 पद 2020, 17:03