My basic issues with MVVM are that most of the SwiftUI magic lives in the view layer, maintaining unidirectional data flow with view models leads to unwieldy solutions, and that views should own their internal state. If a view is doing too much, you haven't factored your views out enough.
The way I see it, you can issue data model updates as commands, which become emergent in the UI without extra work, and have utility types for massaging data for display. I guess I don’t know why it needs to be more complicated than that.
@collin, can you elaborate on what“issue data model updates as commands” looks like?

@lettie For firing off an update, I’m specifically thinking of a command pattern using app intents. If you didn’t want to do that, you could update your models another way.

I find it compelling because aside giving you Shortcuts support for near nothing, and it encapsulates certain kinds of updates which can be classified as actions, like an API request for a list of objects.

If I were just updating one property or something, I’d probably just have that in the view. Depends.

@lettie Back in the day, it was common to do this exact thing using NSOperationQueue with NSOperation subclasses, but app intents seem correct now.