Ответ
Нет, стандартный доступ по индексу array[index] небезопасен. При попытке обратиться к индексу за пределами диапазона 0..<array.count приложение аварийно завершится с ошибкой Fatal error: Index out of range.
Безопасные альтернативы:
-
Явная проверка границ:
if index >= 0 && index < array.count { let element = array[index] } -
Использование свойства
indices:if array.indices.contains(index) { let element = array[index] } -
Создание безопасного сабскрипта через расширение (наиболее удобный способ):
extension Array { subscript(safe index: Index) -> Element? { return indices.contains(index) ? self[index] : nil } } // Использование let item = array[safe: 5] // Возвращает Element? (nil при невалидном индексе) -
Использование высокоуровневых методов: Для многих задач вместо прямого доступа по индексу лучше подходят методы
first,last,first(where:),dropFirst(_:)и т.д.
Почему нет встроенной безопасности? Это компромисс между безопасностью и производительностью. Явные проверки делают код надежнее и предотвращают случайные краши.