MVVM
Суть
MVVM добавляет между View и Model посредника — ViewModel. Это объект без зависимости от UIKit/SwiftUI, который держит состояние экрана в готовом для показа виде (строки, флаги isLoading, отфильтрованные списки) и предоставляет команды (load(), delete(id:)). View наблюдает состояние и перерисовывается сама; ViewModel о View ничего не знает — поэтому одну ViewModel могут показывать несколько View, а тестировать её можно без UI.
Поток данных в iOS-MVVM в основном однонаправленный: события от View идут в ViewModel, состояние — обратно. Двусторонний binding используется точечно ($viewModel.query для текстового поля).
Механизмы наблюдения по эпохам: KVO/RxSwift/ReactiveCocoa → Combine @Published + ObservableObject (iOS 13) → Observation @Observable (iOS 17) — SwiftUI отслеживает только те свойства, которые реально прочитаны в body, и не перерисовывает лишнего.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep