@redcircle

Как получить корректно работающий indexOf после удаления префикса из Data?

Простой пример в Swift 4:

var data = Data([0, 1, 2, 3, 4, 5])
data.removeFirst(5)
let index5 = data.index(of: 5) // = 5 !!!
let count = data.count // = 1

Почему-то index5 равняется 5, хотя в data остаётся только 1 элемент.

Также, если сделать так:
var subdata = data.suffix(1)
let index5s = subdata.index(of: 5) // = 5
let countS = subdata.count // = 1
то результат такой же.

Как получить корректный индекс элемента при вызове indexOf?
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
doublench21
@doublench21 Куратор тега Swift
В описании метода index(of: )
Discussion
Attempting to remove more elements than exist in the collection triggers a runtime error.

Calling this method may invalidate all saved indices of this collection. Do not rely on a previously stored index value after altering a collection with any operation that can change its length.


А как этого избежать? Используя эти методы, никак. Используйте скажем filter:
import Foundation

var data = Data([0, 1, 2, 3, 4, 5])
var newData = data.filter{$0 < 5}
print(newData.index(of: 5) ?? "Ooops") // Ooops


Вообще избегайте всех метод, которые уменьшают длину массива в Data.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы