Какой тип возвращает метод slice для массива в Swift?

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

Ответ

Метод slice (используемый через оператор диапазона ... или ..<) возвращает значение типа ArraySlice<Element>, где Element — тип элементов исходного массива.

Ключевые особенности ArraySlice:

  • View (представление): Это "вид" на часть исходного массива. Он не копирует элементы, а хранит ссылку на исходное хранилище, что эффективно по памяти.
  • Индексы: ArraySlice использует те же индексы, что и исходный массив. Если вы взяли срез array[5...10], то первый элемент среза будет иметь индекс 5.
  • Время жизни: ArraySlice поддерживает исходный массив в памяти. Длительное хранение среза может препятствовать освобождению памяти всего исходного массива.
  • Преобразование в массив: Для получения независимой копии преобразуйте срез в Array.

Пример:

let numbers = [10, 20, 30, 40, 50]
let slice: ArraySlice<Int> = numbers[1..<4] // [20, 30, 40]
print(type(of: slice)) // ArraySlice<Int>

// Индексы сохраняются
print(slice.startIndex) // 1
print(slice[2]) // 30 (элемент исходного массива с индексом 2)

// Для получения нового массива:
let newArray = Array(slice) // [20, 30, 40]