У меня есть таблица в первом ViewController'е, в которую можно через второй VC либо добавлять новые ячейки, либо редактировать существующие
По скриншотам будет нагляднее,
это добавление новой ячейки
Это редактирование
Структура для ячейки и массив:
struct Record {
var amount: Float
var descriptionText: String = ""
var categoryText: String = ""
var categoryImage: String = ""
var date: Date
var id: Int
}
var cellArr = [Record]()
Я присваиваю всем созданным ячейкам уникальный ID на этапе получения данных со второго VC. Мне нужно достать ID при редактировании ячейки, либо создать новую
func sendNewOperation(amount: Float, description: String, category: String,
image: String, date: Date, switcher: String) {
let operationID = Int.random(in: 0...10000)
if (self.cellArr.count > 0) { // Добавление или редактирование ячейки
for i in 0..<(self.cellArr.count) {
print("id: \(cellArr[i].id)")
if cellArr.filter({ $0.id == cellArr[i].id && $0.id != cellArr[i].id }).isEmpty { // ???
self.cellArr[i] = Record(amount: amount, descriptionText: description, categoryText: category, categoryImage: image, date: date, id: cellArr[i].id)
self.tableView.reloadData()
} else {
self.cellArr.append(Record(amount: amount, descriptionText: description, categoryText: category, categoryImage: image, date: date, id: operationID))
self.tableView.insertRows(at: [IndexPath(row: self.cellArr.count - 1, section: 0)], with: .automatic) // + 1 ячейка
}
}
}
if (self.cellArr.isEmpty == true) { // Добавить первую ячейку, записывается рандомный ID
self.cellArr.append(Record(amount: amount, descriptionText: description, categoryText: category, categoryImage: image, date: date, id: operationID))
self.tableView.insertRows(at: [IndexPath(row: self.cellArr.count - 1, section: 0)], with: .automatic) // + 1 ячейка
}
}
У меня возникает сложность с тем, что я не могу создать больше 1 ячейки, так как все последующие вне зависимости от действия только редактируются, то есть в else код не заходит. Но если я уберу в условии $0.id != cellArr[i].id, то существующая ячейка будет дублироваться