I store strings of a view controller in a string array. I import this string array as a Data Source in my table view. This all works smoothly. But now I would like to sort t
I did it within one loop, not few (Swift 4):
struct ContactData {
let longName: String
let phones: [String]
let thumbnailImageData: Data?
}
var contacts = [ContactData]()
var tableViewSource = [Character : [ContactData]]()
var headerTitles = [Character]()
func createContactsData(completionHandler: @escaping () -> Swift.Void) {
contacts = extractContacts() // convert CNContact to custom ContactData
tableViewSource.removeAll()
var prevChar: Character?
var currentBatch: [ContactData]!
contacts.forEach { contact in
guard let firstChar = contact.longName.first else {
return
}
if prevChar != firstChar {
if prevChar != nil {
tableViewSource[prevChar!] = currentBatch
}
prevChar = firstChar
currentBatch = [ContactData]()
}
currentBatch.append(contact)
}
let allKeys = Array(tableViewSource.keys)
let sortedSymbols = allKeys.sorted(by: {$0 < $1})
headerTitles = sortedSymbols
completionHandler()
}