如何在tableview中使多维数组工作

时间:2018-02-01 12:09:33

标签: iphone swift xcode

我正在创建一个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
        }

1 个答案:

答案 0 :(得分:1)

self.sectionsDictionary,字典无序。

从API结果中创建用户组后,请创建一个由组键组成的单独数组:

let groupKeys : [String] = Array(self.sections.keys)

按照您希望部分显示的方式对该数组进行排序(按字母顺序排列,反向字母顺序排列,自然等)

现在你可以这样编写你的函数:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return sections[groupKeys[section]].count
}