@State стал макросом: одна инициализация модели 🌟
🎯 В Xcode 27 @State — макрос, а не property wrapper. Начальное значение создаётся лениво, ровно один раз за время жизни вьюхи. Классический баг «мою модель создают 50 раз при каждом обновлении родителя» просто исчезает. Изменений в коде не нужно вообще: достаточно пересобрать. Ленивое поведение бэкдеплоится до iOS 17 / macOS 14, то есть до релизов, где появился Observation.
⚠️ И вот тут важное: в докладе WWDC два разных бага про совместимость смешивают в один, а технота TN3211 их разделяет. Первый — значение по умолчанию в объявлении плюс присваивание в init. Это не ошибка: инлайновое значение побеждает, а присвоенное в init молча отбрасывается. Просто уберите значение по умолчанию. Второй — ошибка «variable 'self.counter' used before being initialized». Она про другое: про присваивание в @State до того, как проинициализированы остальные хранимые свойства. Макрос синтезирует _counter, и обращение к нему до конца инициализации считается использованием self. Третье, чего нет в списках: @State подавляет синтез memberwise-инициализатора. И навесить поверх него ещё один property wrapper теперь нельзя — «invalid redeclaration of synthesized property».