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.