Может ли слабая ссылка (weak) в Swift быть объявлена как константа (let)?

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

Ответ

Нет, не может.

Причина: Слабая ссылка (weak) должна быть изменяемой (var), потому что ARC автоматически устанавливает ее в nil, когда объект, на который она ссылается, освобождается. Константа (let) не может быть изменена после инициализации, что противоречит этой семантике.

Пример, вызывающий ошибку компиляции:

class MyClass {}

// Ошибка: 'weak' must be a mutable variable
weak let constantReference: MyClass? = MyClass()

Правильное объявление:

class MyClass {}

// Слабая ссылка всегда должна быть 'var'
weak var weakReference: MyClass? = MyClass()

// После освобождения объекта weakReference автоматически станет nil
// Это изменение возможно только потому, что она объявлена как 'var'

Ключевой вывод: Модификаторы weak и unowned применимы только к переменным (var).