Этот вопрос был ранее опубликован, как Алфавитные разделы в табличном представлении таблицы в быстром , но я не могу действительно обернуть его, когда пытаюсь внедрить его в свой собственный код.
У меня есть стандартные функции для установки буквенных разделов:
func numberOfSections(in tableView: UITableView) -> Int {
return collation.sectionTitles.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return collation.sectionTitles[section]
}
func sectionIndexTitles(for tableView: UITableView) -> [String]? {
return collation.sectionIndexTitles
}
func tableView(tableView: UITableView!, sectionForSectionIndexTitle title: String!, atIndex index: Int) -> Int {
return collation.section(forSectionIndexTitle: index)
}
У меня есть массив, в котором собраны данные из локальной книги контактов в приложении: var contactArray = [ExternalAppContactsBook]()
. ExternalAppContactsBook
выглядит следующим образом:
class ExternalAppContactsBook {
var firstName = ""
var lastName = ""
var phoneNumber = ""
var company = ""
}
Я бы хотел перечислить объект в алфавитном порядке на основе lastName
в соответствующих разделах. Я понимаю, что магия случается в cellForRowAt
, но я не могу понять это правильно. Статья выше отображает строку в словарь, но мне нужен объект, который усложняет вещи.
Я сопоставил dictionary
, разбив lastName
из object
на его собственные array
следующим образом:
var lastNameArray = [String]()
for index in self.contactArray {
lastNameArray.append(index.lastName)
}
let groupedDictionary = Dictionary(grouping: lastNameArray, by: {String($0.prefix(1))})
let keys = groupedDictionary.keys.sorted()
var mapedSection = [Section]()
mapedSection = keys.map{Section(letter: $0, names: groupedDictionary[$0]!.sorted())}
Но как мне его использовать?
Может ли кто-нибудь дать мне несколько советов, чтобы начать?
РЕДАКТИРОВАТЬ Это работает таким образом, но я не уверен, будет ли это работатьупорядочить объект в tableview
:
for index in self.contactArray {
lastNameArray.append(index.lastName)
}
if let c = self.contactArray {
let groupedDictionary = Dictionary(grouping: lastNameArray, by: {String($0.prefix(1))})
let keys = groupedDictionary.keys.sorted()
var mapedSection = [Section]()
mapedSection = keys.map{Section(letter: $0, names: groupedDictionary[$0]!.sorted())}
print("☎️", mapedSection)
}
Печать показывает:
Раздел (буква: "H", имена: ["Haro", "Higgins"]), Раздел (буква: «Т», имена: [«Тейлор»])
... и т. Д. Я думаю, что все еще может быть проблема при заполнении tableView
.