2016-09-03 1 views
3

Привет всем, это мой первый пост. Я пытаюсь показать динамические данные в TableView: У меня есть данные в Dictionary как этот var dizionarioComuni : Dictionary<Character, Array<ComuneModel>> = [:] Объектного ComuneModel является пользовательской моделью ничуть данными как nomeComune, numAbitanti и так далее В TableView я писал этот код, чтобы получить число секций и она работаетswift numberOfRowsInSection из словаря

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 

я могу перебирать ключи, но тогда как я могу получить доступ с определенного ключа в списке объектов (из ComuniModel) в определенный индекс (раздел: Int), который является параметром метода?

Я ищу аналогичный вопрос, но ответ не говорит об этом случае. большое спасибо

+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() 
     } 
    } 
} 
+0

, это дает мне индекс ошибок вне диапазона, но ваш код правильный и компилируется. Я пытаюсь понять, в чем проблема, спасибо много. – Sandro

+0

Ознакомьтесь с обновленным ответом. Он поддерживает список отсортированных ключей с помощью наблюдателя свойств 'didSet'. – vacawama

+0

привет, в первую очередь, спасибо за ваше время @vacawama. Но строка кода {var dizionarioComuni дает ошибку, которую я пытаюсь понять .. – Sandro