我正在创建一个iOS Swift 3应用程序,在这个应用程序中,我有一个来自API的数据的tableview。我想在tableview中显示这些数据,但我想按名字分组。我设法首先对数据进行分组(见下文),但xCode正在抱怨XXX。
这是各部分的声明:
var sections = [String: [User]]()
这是我对数据进行分组的方式:
self.sections = Dictionary(grouping: self.contacts.filter({ !$0.firstname!.isEmpty })) {
$0.firstname!.prefix(1).capitalized
}
这是我的输出:
["D": [motto.User(id: Optional(1), firstname: Optional("Dan"), lastname: Optional("Meeler"), email: Optional("time@example.com"))], "M": [coiqo.User(id: Optional(3), firstname: Optional("Mia"), lastname: Optional("Kallas"), email: Optional("mia@ka.com"))]]
这是我收到的错误:
Cannot subscript a value of type '[String : [User]]' with an index of type 'Int'
在tableview的此功能中:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].count
}
如何让这个数组在tableview中工作?
更新
我只需将其添加到dasblinkenlight答案中就可以了!
if(groupKeys.count > 0) {
return sections[groupKeys[section]]!.count
} else {
return sections.count
}
答案 0 :(得分:1)
self.sections
为Dictionary
,字典无序。
从API结果中创建用户组后,请创建一个由组键组成的单独数组:
let groupKeys : [String] = Array(self.sections.keys)
按照您希望部分显示的方式对该数组进行排序(按字母顺序排列,反向字母顺序排列,自然等)
现在你可以这样编写你的函数:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[groupKeys[section]].count
}