【问题标题】:Swift loop through array of dictionaries快速循环遍历字典数组
【发布时间】:2015-05-19 06:03:06
【问题描述】:

为什么在遍历字典数组时会出现此错误?

import UIKit

let tableView = UITableView()

func meh() {
    let product = buildCells()
    for (identifier, nib) in product {
        tableView.registerNib(nib, forCellReuseIdentifier: identifier)
    }
}

func buildCells() -> [[String: UINib]] {
    var collector = [[String: UINib]]()
    let identifier = "identifier"
    let nib = UINib(nibName: "TableViewCell", bundle: nil)
    let asdf = [identifier: nib];
    collector.append(asdf)
    return collector
}

meh() 方法中的forin 循环产生以下错误:

'Dictionary' 不能转换为 '([[String : UINib]], [[String : UINib]])'

【问题讨论】:

  • 虽然截图很好,但请将源代码和错误消息作为纯文本发布在问题中,以便它与 Google 合作(并向您提出您在编写问题时可能重复的问题) .另外,它实际上可以复制和粘贴等。

标签: loops swift dictionary


【解决方案1】:

我们无法遍历字典数组的键和值。不过,我们可以遍历字典。对于每个字典,我们可以遍历它的键和值:

let product = buildCells()
for dict in product {
    for (identifier, nib) in dict {
        tableview.registerNib(nib, forCellReuseIdentifier: identifier)
    }
}

但我认为问题实际上更有可能是 buildCells() 中发生的废话。你为什么要返回一个字典数组?您是否打算拥有重复的密钥?我不认为 tableview 会让你为同一个标识符注册多个 nib。

我们为什么不直接返回字典?

func buildCells() -> [String: UINib] {
    var dict = [String: UINib]()
    dict["identifier"] = UINib(nibName: "TableViewCell", bundle: nil)
    // rinse & repeat for all of your other ID/nib combos with no duplicate IDs
    return dict
}

现在我们可以在没有外部循环的情况下遍历字典中的键/值对:

for (identifier, nib) in dict {
    tableview.registerNib(nib, forCellReuseIdentifier: identifier)
}

【讨论】:

  • ...因为我昨晚编码很晚,而且这种方法似乎在世界上都有意义。
猜你喜欢
  • 2014-09-16
  • 1970-01-01
  • 2015-08-16
  • 2020-02-02
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多