Для чего используется параметр `repeating` в инициализаторах Swift?

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

Ответ

Параметр repeating в инициализаторах коллекций Swift используется для быстрого создания массива или буфера, заполненного повторяющимся значением заданное количество раз.

Синтаксис и пример:

// Создание массива из 5 нулей
let arrayOfZeros = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]

// Создание массива строк
let greetings = Array(repeating: "Hello", count: 3) // ["Hello", "Hello", "Hello"]

// Создание буфера с неинициализированной памятью (для продвинутых сценариев)
let buffer = UnsafeMutableBufferPointer<Int>(repeating: 0, count: 10)

Ключевые особенности и применение:

  • Производительность: Это оптимизированный способ выделить и заполнить память, быстрее, чем цикл append.
  • Предварительное выделение: Часто используется для создания массива-заготовки, который будет позже заполнен данными.
  • Ссылочные типы: Для классов (reference types) параметр repeating создаст массив, где все элементы ссылаются на один и тот же экземпляр объекта.
    class MyClass { var value = 1 }
    let object = MyClass()
    let array = Array(repeating: object, count: 3)
    array[0].value = 100
    print(array[2].value) // 100, так как все элементы — одна ссылка.
  • Поддерживаемые типы: Array, ContiguousArray, UnsafeMutableBufferPointer и другие.