Как работает сабскрипт (subscript) у массива в Swift?

«Как работает сабскрипт (subscript) у массива в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сабскрипт массива в Swift предоставляет краткий синтаксис для доступа к элементам по индексу или диапазону индексов.

Базовое использование:

var numbers = [10, 20, 30, 40, 50]

// Доступ по индексу (Int)
let secondNumber = numbers[1] // 20

// Запись по индексу
numbers[2] = 33 // Теперь массив: [10, 20, 33, 40, 50]

// Доступ по диапазону индексов (Range<Int>)
let slice = numbers[1...3] // [20, 33, 40] (тип ArraySlice<Int>)

Критически важные особенности:

  • Проверка границ: Использование индекса вне допустимого диапазона (0..<count) вызывает фатальную ошибку времени выполнения (crash).
  • Безопасный доступ: Рекомендуется использовать безопасные методы:

    // Получение первого/последнего элемента (возвращают Optional)
    let first = numbers.first // Int?
    let last = numbers.last   // Int?
    
    // Проверка индекса перед доступом
    let index = 5
    if numbers.indices.contains(index) {
        let value = numbers[index]
    }

Создание кастомного безопасного сабскрипта:

extension Array {
    subscript(safe index: Int) -> Element? {
        // Возвращает элемент, если индекс корректен, иначе nil
        return indices.contains(index) ? self[index] : nil
    }
}

let safeValue = numbers[safe: 10] // nil, а не crash