The value-type behavior is what they actually want in SwiftUI. One of the inspiration for SwiftUI was the virtual DOM in ReactJS.
The crucial part of the implementation is the fact that there are multiple copies of the UI tree and SwiftUI compares them to see what has changed. For example:
- Generate view tree A
- Render view tree A to screen
- State changes (e.g. user has clicked a button)
- Generate view tree B
- Check differences between tree A and B and render only what is required.
Generating copies is rather difficult with classes but it's simple with value types.
There are additional advantages when comparing against classes but this is the main reason. Value types (as immutable data structures) are perfect for functional programming patterns used within SwiftUI.
Regarding memory, note that structs do not occupy more space than classes and it is a misconception that they live only in the stack. They are allocated as temporaries in the stack, but once you save them somewhere (e.g. to a class property), they don't live in the stack any more.