Although apparently nothing is mutated, the observers of a are always called.
Refer to this thread for the discussion.
The SIL seems to be copying the entire composite variable (Int -> A -> Optional<A>) onto the stack, the didSet invocation simply being a side-effect of running the variable’s setter to copy back the contents from the stack.
"So no, evidently the compiler is not recognizing that it’s dealing with one big composite of value types and simply figuring that it can treat them all as one lump of data. It’s repeating the same unpacking process at every layer of nesting."
Might be related to