У меня проблема с отображением индексированных объектов в виде таблицы. Я проиндексировал объекты как список клиентов на основе первой буквы их имени. Индексированные результаты помещаются в словарь, как этоОшибка индексирования с помощью массива в словаре (Swift 3.0)
{Char: [Client]}
Char является первым символом имени клиента и [Client], являющегося массив клиентских объектов, которые имеют первую букву своего имени, совпадающее с Чаром. Когда распечатывается, это проявляется так:
{'D': [Client("David"), Client("Dan")]}
Однако, когда я иду, чтобы установить эти названия в Tableview (_ Tableview: UITableView, cellForRowAt indexPath: IndexPath) функция, я получаю индекс из оценки точности , Массив клиента имеет счетчик 3 и словарь контактов имеет два счет, но имеет все три объекта его как таковые:
{'S': [Client("Sam")], 'D': [Client("David"), Client("Dan")]}
Как пройти через словарь правильно, чтобы получить индивидуальные клиент в каждую ячейку таблицы с соответствующими заголовками разделов? Я использую Swift 3.0. Ниже я опубликовал, как я проиндексировал его, а также функцию, которую я пытаюсь переопределить.
ClientTableViewController.swift
var clients = Client.loadAllClients()
var contacts = [Character: [Client]]()
var letters: [Character] = []
override func viewDidLoad() {
super.viewDidLoad()
letters = clients.map { (name) -> Character in
return name.lName[name.lName.startIndex]
}
letters = letters.reduce([], { (list, name) -> [Character] in
if !list.contains(name) {
return list + [name]
}
return list
})
for c in clients {
if contacts[c.lName[c.lName.startIndex]] == nil {
contacts[c.lName[c.lName.startIndex]] = [Client]()
}
contacts[c.lName[c.lName.startIndex]]!.append(c)
}
for (letter, list) in contacts {
contacts[letter] = list.sorted(by: { (client1, client2) -> Bool in
client1.lName < client2.lName
})
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Name", for: indexPath) as! ClientTableViewCell
cell.clientName?.text = contacts[letters[indexPath.row]]?[indexPath.row].lName
return cell
}
Вам нужен раздел для каждой буквы алфавита, за которым следует ячейка для каждого контакта в этом разделе? – Pierce
Как выглядит ваш код, когда вы устанавливаете количество разделов и количество строк? – jherg
Вы, кажется, не используете разделы вообще. Вы должны иметь один раздел за письмо и использовать его для поиска правильного контакта в 'cellForRow' – Paulw11