我希望字典的迭代发生在其中的所有键中,而不仅仅是indexPath.row中的一个
struct Whatever { var title:String var tag:[String:String?]?}
var cases = [ …
如果使用标准表视图(没有节),则表示数据源中的每个项 的 一 强> 行。你不能简单 创建一个新的indexPath.row 。
您有两种选择:
使用部分:一个 Whatever 是一个 的 部分 强> , title 是标题,每个 tag 是一个 的 行 强> (见下面的代码)
Whatever
title
tag
连接标记键和值
cell.titleLabel?.text = caseTag.keys.joined(separator: ", ") cell.txt.text = caseTag.values.joined(separator: ", ")
关于 第二个问题 :字典是无序的,没有订单。如果您需要特定订单,请使用其他结构 Tag 和做 tags 例如一个数组
Tag
tags
struct Whatever { let title: String let tags: [Tag] } struct Tag { let key, value : String } let cases = [ Whatever(title: "Name1", tags: [Tag(key: "key1", value: "value1"), Tag(key: "key2", value: "value2")]), Whatever(title: "Name2", tags: [Tag(key: "key3", value: "value3"), Tag(key: "key4", value: "value4")]) ] func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { let case = cases[section] return case.title } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { ... let section = cases[indexPath.section] let case = section.tags[indexPath.row] cell.titleLabel?.text = case.key cell.txt.text = case.value
我将向您的struct添加两个计算属性,分别返回标记键和值列表,以使其余代码更清晰。
var allTagKeys: String { if let keys = tag?.keys { return keys.sorted().joined(separator: ", ") } return "" } var allTagValues: String { if let values = tag?.compactMap({ $0.value }) { return values.joined(separator: ", ") } return "" }
}
请注意,我在键中添加了排序,但不确定是否需要。