如何获取字典中数组索引的值以填充 Tableview

How to get the value of an Array Index Within a Dictionary to Populate the Tableview

我将产品标签存储在以下变量中:

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

我的 tableView 也有一个搜索栏,我根据用户从 productTags 搜索的内容填充以下变量:

var searchResults: [String : [String]] = [:]

所以这两个变量的内容是这样的:

productTags = [ product1 : [tag1, tag2, tag3, tag4],
                product2 : [tag1, tag2, tag3, tag4, tag 5], 
                product3 : [tag1, tag2, tag3]
              ] 
// similar for the searchResults depending on the search

现在我只想将每个产品的 tag1 填充到 table 视图中。我该怎么做?

func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return //what should I be returning here? 
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: Identifiers.HomeSearchCell, for: indexPath) as! HomeSearchCell

    cell.productName?.text = //how can I populate the "tag1" of the product in here? so the label shows the tag1 as the search result

    return cell
}

我还想确保我可以跟踪用户具体点击了哪个标签,这样我就可以将标签追溯到产品 ID。例如,如果您搜索 product2tag1,然后在 table 视图的搜索结果中看到 tag1 并单击它;如何从您选择的行中获取产品 ID,在本例中为 product2

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// what should I put here to get the productID of the tag/row selected by the user from the searchresults? 
    }

编辑: 这就是我填充 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 以填充 searchResults:

的方式
searchResults = productTags.filter({ (productTags) -> Bool in
            if let name = productTags.value as? [String] {
                for tag in name {
                    let isMatch = tag.localizedCaseInsensitiveContains(SearchText)
                    return isMatch
                }
            }
            return false
        })

TableViews 在处理数组时效果最好。如果可能的话,我会把字典变成一个 Dictionary<String:[String]> 的数组。所以它看起来像这样。

var productTags: [[String: [String]]] = [
    [product1: [tag1, tag2, tag3, tag4]],
    [product2 : [tag1, tag2, tag3, tag4, tag5]],
    [product3 : [tag1, tag2, tag3]]
]

然后从那里你可以return数组中产品字典的数量

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
        Int) -> Int {

         return productTags.count 
    }

从那里您可以通过 indexPath.row

访问 productTagDictionaries
 let productTags = productTags[indexPath.row].values.first
 cell.productName?.text = productTags?.first