来自字典

时间:2016-09-03 10:16:38

标签: ios swift tableview

各位大家好,这是我的第一篇文章。 我试图在TableView中显示动态数据:我有Dictionary这样的数据var dizionarioComuni : Dictionary<Character, Array<ComuneModel>> = [:] 对象ComuneModel是一个自定义模型whit数据,如nomeComune,numAbitanti等 在TableView我编写了这段代码以获取部分的编号并且它可以工作

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    //tot valori nel dictionary
    dizionarioComuni.count
}

字典的键是Charachters,因为我想使用这些键作为节的标题。 问题是:如何在表格视图的方法中获得numberOfRowsInSection?方法的签名是这个

 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

anf取整数但我的钥匙是charachters。我尝试使用此代码访问字典的所有键

var keys = dizionarioComuni.keys

我可以迭代密钥,但是如何从特定索引(部分:Int)的对象列表(ComuniModel)中的特定密钥访问,该索引是方法的参数?

我搜索类似的问题,但答案并未谈及此案例。 非常感谢

1 个答案:

答案 0 :(得分:1)

Swift词典是无序的,因此您需要维护一个单独的排序键列表,并使用它来访问您的数据。

var sortedKeys = dizionarioComuni.keys.sort()

然后numberOfRowsInSection成为:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dizionarioComuni[sortedKeys[section]]?.count ?? 0
}

注意:只要您的密钥列表发生变化,您就需要重新加载表格中的数据。

class MyTableViewController: UITableViewController {
    var sortedKeys = [Character]() {
        didSet {
            if oldValue != sortedKeys {
                // reload tableView
                tableView.reloadData()
            }
        }
    }
    var dizionarioComuni = [Character: [ComuneModel]]() {
        didSet {
            sortedKeys = dizionarioComuni.keys.sort()
        }
    }
}