How to make alphabetically section headers in table view with a mutable data source

前端 未结 3 1348
一生所求
一生所求 2021-01-05 07:59

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

3条回答
  •  清歌不尽
    2021-01-05 08:31

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

提交回复
热议问题