This is because it's not the default value, but rather the initial value. You have already defined a constant with a value and there is no way to change it.
struct A {
let value: Int = 0
}
Here, value cannot be overwritten, so there's no point in generating a memberwise initializer for A. Now, if you mean that the compiler should move the initial value into the initializer implicitly, then that's a different thing.
This topic was discussed heavily during the SE-0018 process. The conclusion of that was that there is some possibility of changing the language such that let properties could have default values. The most recent discussion in this area was Explicit Memberwise Initializers. All work in this area is stalled until somebody is willing and able to work on compiler implementation.
Well, then there are double standards here.
Let's say we define a "var" property with "didSet" and give it an initial value (as we remember, "didSet" doesn't fire on initialization).
Then we write an initializer, where insisting on imputing values for all the properties.
The question is: should "didSet" of the "var" fire on object creation?
Following your logic, it should! Because the variable was initialized already. So when creating the object, its value being overwritten.