This pitch seems closely related and AFAICT explains your observed current behaviour: Allow Property Wrappers with Multiple Arguments to Defer Initialization when wrappedValue is not Specified
Namely, wrapped properties get immediately initialised at their declaration if a default value is provided there; assigning them in the initialiser then counts as reassignment and that's why didSet
gets (IMO somewhat unexpectedly) called.
If the pitched proposal were to be adopted then neither didSet
would get called in your example.