Как добавить [[String: [String]]] = [[:]] вместо [String: [String]] = [:]? - PullRequest
1 голос
/ 10 апреля 2020

Я получаю список массивов из базы данных Firestore и добавляю, к следующей переменной:

var productTags : [String : [String]] = [:]

Это мой код для получения данных и добавления их в переменную productTags:

db.collection(DatabaseRef.searchTags).document(DatabaseRef.productTags).getDocument { snapshot, error in

            guard error == nil, let snapshot = snapshot else {
                return
            }

            let data = snapshot.data()!


            for (key, _) in data {

                let productTags = data["\(key)"] as? [Any]

                if let maxIndex = productTags?.count {

                    for index in 0..<maxIndex {

                        if let tag = productTags![index] as? String, tag != "" {

                            if self.productTags[key] == nil {
                                self.productTags[key] = []
                                self.productTags[key]?.append(tag)
                            } else {
                                self.productTags[key]?.append(tag)
                            }

                        }
                    }

                }
            }
        }

Это прекрасно работает и дает следующие результаты:

productTags = [ product1 : [tag1, tag2, tag3, tag4],
                product2 : [tag1, tag2, tag3, tag4, tag 5], 
                product3 : [tag1, tag2, tag3]
              ] 

Однако мне нужно превратить словарь в массив, чтобы результаты выглядели так:

productTags = [ [product1 : [tag1, tag2, tag3, tag4]],
                [product2 : [tag1, tag2, tag3, tag4, tag 5]], 
                [product3 : [tag1, tag2, tag3]]
              ] 

Итак, моя переменная будет выглядеть так:

var productTagsArray : [[String : [String]]] = [[:]]

Как бы я изменил свой код, чтобы добавить его в массив вместо словаря?

1 Ответ

1 голос
/ 10 апреля 2020

Я бы предложил преобразовать словарь в массив после того, как вы закончите:

let productTagsArray = productTags.map { [$0: $1] }

Кроме того, вы можете использовать версию поиска словаря default, чтобы изменить это:

if self.productTags[key] == nil {
    self.productTags[key] = []
    self.productTags[key]?.append(tag)
} else {
    self.productTags[key]?.append(tag)
}

в это:

self.productTags[key, default: []].append(tag)
...