Sidenote: Interestingly, every single tutorial I find just omits stuff like this.
That is because MVVM doesn't put emphasis on control. It is built around having model-view binding. MVVM does not prevent you from writing bad control codes, and it requires binding mechanism not present in iOS until SwiftUI. It's by no means solution to everything as some Internet articles would like you to believe.
SwiftUI is influenced by MVVM? yes.
SwiftUI is based on MVVM? no. I'd argue it is more React-like.
Having no view controller does not mean you should do control in view model.
It just means you don't need an extra object to do control. Function itself is control.
In SwiftUI you use @State for local state, and function to mutate it. This is where you will find control.
There are also other mechanisms to import external state such as @EnvironmentObject.
And state changes would trigger view update, as React.
Some MVVM developer and their mother would create an object called view model with no binding support whatsoever; then spend a bunch of hours doing manual binding with Combine, and after several refactor commits later tell you MVVM is the second coming of Christ and best hope for clean architecture.
You don't have to. Obvious I'm opinionated, so take it with a grain of salt.
You only have to look for where and how SwiftUI does binding, and you will know view model is redundant. So no, SwiftUI is not based on MVVM. It can have model-view mapping without ever creating any view model. You don't need to learn MVVM to understand any of that.
Managing control in SwiftUI is easier if your control are functions. The removal of view controller means you don't have to worry about its life cycle and internal states. You can manage them through protocols and even introduce some functional programming paradigms.
If you take a closer look at SwiftUI design, you would notice the heavy usage of value type and removal of objects and their life cycle. Both are in direct opposition of MVVM paradigms.
Every MVVM developer uses reference type as view model; SwiftUI wants you to map value type to view. i.e.; struct Model: View. Swift is not Java, but you won't see anyone mention that.