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 subscript
protocol member ofObservableObject
with the argument labels_enclosingInstance:wrapped:storage:
, and _forEachField(of:options:body:)
, which is more flexible thanMirror
and hidden from ordinary code using@_spi(Reflection)
; hat tip to @AlexanderM!
So yes, there is reflection behind the scenes.