I work a lot with state machines. A pattern with statically typed states become available with move-only types, here are some details and example: Typestate - the new Design Pattern in Swift 5.9 | Swiftology
I want to create library which helps to work with states, and I want library to guide users in a right way: use move only types, not Copyable types or classes.
Another one reason is exit action
– the action which is performed on state exit. It can be done in dinit
which can be declared in move-only types and classes, but classes should be discouraged.