Ответ
Да, weak-ссылка в Swift всегда имеет опциональный тип (Type?). Это прямое следствие механизма управления памятью (ARC).
Причина: weak-ссылка не увеличивает счетчик сильных ссылок (strong reference count) на объект. Когда на объект больше не остается сильных ссылок, ARC немедленно освобождает его память. Все weak-ссылки на этот объект автоматически устанавливаются в nil, чтобы предотвратить обращение к освобожденной памяти (dangling pointer).
Пример:
class Person {
let name: String
init(name: String) { self.name = name }
}
// weak-ссылка обязана быть опционалом
weak var optionalRef: Person? = Person(name: "Alice")
// После выхода из области видимости, если других strong ссылок нет,
// optionalRef автоматически станет nil
Сравнение с unowned:
weak: ВсегдаOptional. Безопасна, становитсяnil.unowned: Не опционал. Предполагает, что объект живет дольше ссылки. Обращение после деаллокации вызовет краш.
Практическое применение: weak используется для разрыва циклов сильных ссылок, особенно в паттернах делегат (delegate) и внутри замыканий (closures), чтобы избежать утечек памяти.