如何获取字典中数组索引的值以填充 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。例如,如果您搜索 product2
的 tag1
,然后在 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
我将产品标签存储在以下变量中:
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。例如,如果您搜索 product2
的 tag1
,然后在 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