Можно ли работать со ссылками на типы-значения (Value Types) в Swift?

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

Ответ

Да, Swift предоставляет контролируемые механизмы, но это требуется редко. Типы-значения (структуры, перечисления) по умолчанию копируются. Работа со ссылками на них возможна в специфичных сценариях.

1. Inout-параметры: Передача значения по ссылке для модификации внутри функции.

func increment(_ number: inout Int) {
    number += 1
}
var myNumber = 5
increment(&myNumber) // myNumber = 6

2. Классы-обертки (Boxing): Антипаттерн для Swift, но технически возможен.

final class Box<T> {
    var value: T
    init(_ value: T) { self.value = value }
}
var box = Box(42) // Структура Int теперь хранится в куче по ссылке

3. Небезопасные указатели (UnsafeMutablePointer): Для низкоуровневых оптимизаций, требует крайней осторожности.

Почему это редко нужно? Сила типов-значений — в предсказуемости и отсутствии неявного разделения состояния. Использование ссылок нивелирует эти преимущества и может привести к ошибкам.