This goes back to my message to you at the start of the thread: in Swift, two distinct objects generally should not have the same hash. And if objects hash on data, that data must be immutable (or else you get the crashes Brandon showed above), and should not have any long-living behavior (or else that behavior might get silently discarded when stored).
I think you are bringing baggage/assumptions with how to hash data types in object oriented languages like Ruby, Python, Java, and even Objective-C to an extent, where there are concepts like "plain old Java objects" (POJOs), which are immutable objects without behavior that should hash on their data. In Swift, however, we have value types, like structs/enums, which are our version of POJOs, except enforced at compile time and with local reasoning when it comes to mutation. And in Swift these value types trivially synthesize Hashable for you automatically.
This means that in Swift you almost never define a class as you would a POJO. You will almost always reach for a struct instead.
The one common exception is SwiftData models, which are classes. But guess what? SwiftData models come with an implementation of Hashable, and its object identity, not the data inside. That means even SwiftData's default implementation is the same as this thread's pitch.
I think if the language has been exercised long enough for frameworks like SwiftData to realize that the default should be object identity, there's no reason not to consider that to be a reasonable default for every reference type.
When we do reach for a class over a struct in Swift, it's generally because we need something that has behavior over time, like an @Observable model, and when we need that model to be hashable, so that it can be stored in a set or if you want to use a model in a SwiftUI navigation stack, the only reasonable thing to hash on is its object identity.