@State has always been quietly magical: you read the value directly, get a binding through the dollar-sign prefix, and let the framework own the storage. Now that Apple documents it as a macro, the public declaration is a wall of attached-accessor and peer attributes. It reads like a breaking change and mostly is not one — you still declare @State on a property that belongs to a single view, initialise it where you declare it, and keep it private.
What the macro spelling does explain is the behaviour that always seemed slightly arbitrary: how initialisation is deferred, why the old Optional workarounds are no longer needed, and why assigning state inside init() remains a trap rather than a shortcut.
It closes on how @State sits next to @Observable, @Binding and @Bindable, and on the fact that a macro is not free — it expands into real code with real compile-time cost.