let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]]
我正在使用带有多个部分的UITableView。我有一个带键值的数组,所以我想在数组中得到它们的键,并且它们在另一个数组中的值记住每个值都是一个单独的数组,因为一个数组(键)用于节标题,另一个用于每个节行。
答案 0 :(得分:3)
以下是一个例子:
let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]]
var keys = [String]()
var values = [[String]]()
for (key, value) in dicForSections {
keys.append(key)
values.append(value)
}
答案 1 :(得分:2)
Swift的Dictionary
计算了返回键和值的属性:
let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]]
var keys = [String](dicForSections.keys)
var values = [[String]](dicForSections.values)
Martin R建议让编译器推断出类型:
var keys = Array(dicForSections.keys)
var values = Array(dicForSections.values)
答案 2 :(得分:0)
其他海报都按字面意思回答了你的问题。鉴于您的建议用法以及字典是无序集合并且您通常希望更多地控制表格视图的布局,我强烈建议您重新考虑数据格式。
如果您考虑表格后面的数据,它实际上是一个部分数组,每个部分都有一个标题和一些相关数据。
这对我来说只是使用一个元组数组的第一次重组:
let sections = [("Home", ["Rooms","Stuff"]), ("My Profile", ["Property", "Agent", "Policy", "Claims"]), ("Help",["Recovery","ok"])]
func nameForSection(section:Int) -> String {
return sections[section].0
}
func titleForIndexPath(index:NSIndexPath) -> String {
return sections[index.section].1[index.row]
}
这样做的好处是创建数据非常简洁,但数据创建或访问数据的代码都不是特别清晰。作为旁注,您可以使用此代码段将现有数据重新组织到此结构中,但这些部分的排序将会丢失。
let sections = Array(dicForSections)
在Objective-C中,我们可以通过一系列字典来解决这个问题,但是既然你问过Swift和Swift有嵌入式结构,那么我们只是使用它们,并在我们处理它时添加一些格式。 :
struct Section {
let title:String
let rows:[String]
}
let sections = [
Section(title:"Home", rows:["Rooms","Stuff"]),
Section(title:"My Profile", rows:["Property", "Agent", "Policy", "Claims"]),
Section(title:"Help", rows:["Recovery","ok"])
]
func nameForSection(section:Int) -> String {
return sections[section].title
}
func titleForIndexPath(index:NSIndexPath) -> String {
return sections[index.section].rows[index.row]
}
现在,数据的布局和对数据的访问都更加安全和清晰,并且我们的部分的顺序得以维持,因为我们还没有通过字典将其汇总。