There was an earlier thread on the same topic, and the conclusion seemed to be that two underscore-prefixed features are at play;
- a
static subscriptprotocol member ofObservableObjectwith the argument labels_enclosingInstance:wrapped:storage:, and _forEachField(of:options:body:), which is more flexible thanMirrorand hidden from ordinary code using@_spi(Reflection); hat tip to @AlexanderM!
So yes, there is reflection behind the scenes.