Ответ
Конструкция weak let используется для объявления слабой ссылки (weak) на неизменяемое значение (let). Это возможно, когда:
- Ссылаемый объект (экземпляр класса) может быть освобожден в течение жизненного цикла захватывающего контекста.
- Сама ссылка после захвата не должна меняться (является константой).
Практический пример — захват в замыкании:
class Service {
func fetchData() { print("Fetching...") }
}
let networkService = Service()
let completionHandler = { [weak let service = networkService] in
// `service` — слабая константа. Она может стать `nil`,
// но сама ссылка `service` внутри замыкания неизменна.
service?.fetchData()
}
Ключевой момент: weak ссылка всегда опциональна (Optional), поэтому даже weak let будет иметь тип SomeClass?. Ее значение может измениться на nil при деаллокации объекта, но переназначить саму переменную service на другой объект нельзя.