weak let: ссылка, которая всё равно обнулится 💣

🎯 SE-0481 разрешает комбинировать weak и let. Раньше слабая ссылка требовала var, даже если вы её никогда не переприсваиваете.

⚠️ Первое и главное: это Swift 6.3, а не 6.2. В 6.2 компилятор всё ещё выдаёт «'weak' must be a mutable variable, because it may change at runtime». Пропозал приняли в цикле 6.2, поэтому половина статей ставит его в 6.2 — но в релизной заметке swift.org про 6.2 его нет.

⚠️ Второе: let запрещает переприсваивание, но не мешает объекту умереть. Ссылка по-прежнему обнуляется при уничтожении референта, тип по-прежнему Optional, и каждое чтение по-прежнему требует разворачивания. Так что «безопаснее» — не про это. Настоящая мотивация была не в выразительности, а в конкурентности: Sendable-класс не мог держать weak var, потому что это изменяемое хранимое свойство, а захваты [weak self] неявно делались изменяемыми, из-за чего замыкание не могло быть @Sendable. Ограничения: тип обязан быть Optional, локальные переменные разрешены, в остальном обычные правила let.

#Swift #Swift6 #iOSDevelopment #MemoryManagement #SwiftConcurrency

weak let: ссылка, которая всё равно обнулится 💣 | Сетка — социальная сеть от hh.ru