Это очень громоздкий код.
Вам настоятельно рекомендуется использовать структуру, а не словарь, по крайней мере, с членом name
struct Person {
let name : String
}
Объявить и переименовать arrJsonDic
(более наглядно) как
var people : [Person]()
и arrUserList
как
var users = [String: [Person]]()
Для разделов объявляем другой массив
var letters = [String]()
Сгруппируйте массив и заполните letters
просто
users = Dictionary(grouping: people, by: { String($0.name.first!) })
letters = users.keys.sorted()
В табличном представлении в numberOfSections
return
return letters.count
и в numberOfRows
возврат
let letter = letters[section]
return users[letter]!.count
В cellForRowAt
назначить имя метке с помощью
let letter = letters[indexPath.section]
let user = users[letter]![indexPath.row]
cell.nameLabel.text = user.name
------------------------------
Чтобы сделать это все еще быстрее объявить вторую структуру Section
struct Section {
let index : String
let people : [Person]
}
удалить
var letters = [String]()
и объявить users
var users = [Section]()
Группировка немного отличается
let grouped = Dictionary(grouping: people, by: { String($0.name.first!) })
users = grouped.map({ Section(index: $0.0, people: $0.1) }).sorted{$0.index < $1.index}
Код в трех методах делегата табличного представления
return users.count
-
return users[section].people.count
-
let user = users[indexPath.section].people[indexPath.row]
cell.nameLabel.text = user.name