В приложении, над которым я работаю, мне нужно взять один элемент массива, указав индекс элемента в массиве, например array[index]
.
Это простой UICollectionView, который заполняется элементами, которые я получаю из массива.
Чтобы защититься от исключения индекса вне диапазона, я делаю это:
guard index < array.count else { return }
return array[index]
Несмотря на то, что у меня есть эта защита, я получил исключение индекса вне диапазона в строке array[index]
(но не всегда).
Я не знаю, как это может произойти.
Я даже добавил еще одну проверку:
extension Collection where Indices.Iterator.Element == Index {
subscript (optional index: Index) -> Iterator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
Итак, я делаю это (это фактический фрагмент кода из приложения):
...
guard let section = chatSections[optional: indexPath.section] else {
return nil
}
guard indexPath.item < section.itemViewModels.count else {
return nil
}
return section.itemViewModels[optional: indexPath.item]
Это не всегда происходит, но иногда я получаю исключение Index вне диапазона.
Я отлаживал большую часть дня, пытаясь выяснить условия, когда происходит сбой, чтобы я мог понять, почему, но, похоже, это происходит случайно.
Кто-нибудь знает, как это возможно? Кто-нибудь сталкивался с такой проблемой?