Ваши данные содержатся в contactsArray
, но источником данных вашей таблицы является sections
массив.Вам нужно обновить массив sections
при изменении contactsArray
.
Переместить код, который создает массив sections
, в свой собственный метод.Вызывайте его после вставки данных в contactsArray
и перед вызовом reloadData()
в таблице:
func createSectionsArray() {
let firstLetters = contactsArray.map { $0.titleFirstLetter }
let uniqueFirstLetters = Array(Set(firstLetters))
sortedFirstLetters = uniqueFirstLetters.sorted()
sections = sortedFirstLetters.map { firstLetter in
return contactsArray
.filter { $0.titleFirstLetter == firstLetter }
.sorted { $0.fullName < $1.fullName }
}
}
Вы также захотите вызывать его из viewDidLoad()
вместо кода, который вы удалили, чтобы создатьфункция.
Удаление:
Для удаления сначала настройте класс Contact
на Equatable
:
class Contact: Equatable {
static func == (lhs: Contact, rhs: Contact) -> Bool {
return lhs.fullName == rhs.fullName && lhs.phoneNumber == rhs.phoneNumber
}
var fullName: String
var phoneNumber: String?
init(fullName: String, phoneNumber: String) {
self.fullName = fullName
self.phoneNumber = phoneNumber
}
}
Затем, когда элемент удален, используйте indexPath.section
и indexPath.row
для поиска contact
, найдите contact
в contactsArray
и удалите его, сгенерируйте массив sections
, затем перезагрузите таблицу:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let contact = sections[indexPath.section][indexPath.row]
if let index = contactsArray.index(of: contact) {
contactsArray.remove(at: index)
createSectionsArray()
contactsTableView.reloadData()
}
}
}