enumerated() стал Collection — но с двумя оговорками 💥

🎉 SE-0459 (Swift 6.2) добавил enumerated() конформанс к Collection. Генерик-алгоритмам больше не нужен промежуточный Array(…). Но две оговорки бьют сразу, и обе гуляют по статьям в неверном виде.

⚠️ Первая: items.enumerated()[2] не компилируется. Index у EnumeratedSequence — собственная структура, а не Int. Индексироваться надо через startIndex / index(_:offsetBy:). При этом count и isEmpty работают.

⚠️ Вторая, более болезненная: конформанс не бэкдеплоится. В исходниках стандартной библиотеки каждый член помечен @available(SwiftStdlib 6.2, *), а это iOS 26 / macOS 26. На таргете iOS 18 нужен if #available. В тексте самого пропозала до сих пор написано 6.1 — верить надо исходникам. Ещё нюанс: last и reversed() требуют, чтобы базовая коллекция была RandomAccessCollection. Для String, который только bidirectional, .reversed() по-прежнему уйдёт в Sequence-перегрузку и вернёт массив. И про «стало быстрее»: enumerated() и раньше был ленивым и ничего не аллоцировал. Выигрыш в том, что Array(…)больше не нужен в генериках, а dropFirst(n) стал O(1) на random-access.

#Swift #Swift6_2 #iOSDevelopment #SwiftProgramming

enumerated() стал Collection — но с двумя оговорками 💥 | Сетка — социальная сеть от hh.ru