.onDelete объявляется как
@inlinable public func onDelete(perform action: ((IndexSet) -> Void)?) -> some DynamicViewContent
IndexSet - это просто набор всех индексов элементов в массиве для удаления. Давайте попробуем этот пример
var arr = ["A", "B", "C", "D", "E"]
let idxs = IndexSet([1, 3])
idxs.forEach { (i) in
arr.remove(at: i)
}
print(arr)
, поэтому результирующее значение arr теперь равно
["A", "C", "D"]
. Причина, по которой .onDelete использует IndexSet, заключается в том, что для операции удаления можно выбрать более одной строки в списке List. .
БУДЬТЕ ОСТОРОЖНЫ! смотрите полученный массив! На самом деле для удаления элементов один за другим нужно немного логики c ...
Давайте попробуем
var arr = ["A", "B", "C", "D", "E"]
let idxs = IndexSet([1, 3])
idxs.sorted(by: > ).forEach { (i) in
arr.remove(at: i)
}
print(arr)
это работает сейчас, как вы ожидали, не так ли? результат теперь равен
["A", "C", "E"]
На основании
theperiodlist.periods.remove(atOffsets: offsets)
кажется, что ThePeriodList
уже имеет встроенную функцию с необходимой функциональностью.
в вашем случае просто замените
AdjustProfileRemove(period: theperiodlist.periods[XXX])
на
offsets.sorted(by: > ).forEach { (i) in
AdjustProfileRemove(period: theperiodlist.periods[i])
}