@State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject — в чём разница?
Суть
Это property wrappers, которые говорят SwiftUI, кто владеет данными и как view на них подписана.
@State— источник истины, которым владеет сама view. SwiftUI хранит значение вне структуры (view пересоздаётся, state — нет). Для value-типов и, с iOS 17, для@Observable-объектов.@Binding— ссылка на чужой@Stateдля чтения и записи; создаётся через$. Ребёнок меняет данные родителя, не владея ими.@StateObject— view владеетObservableObject-моделью: объект создаётся один раз (аргумент — autoclosure) и живёт, пока жива view.@ObservedObject—ObservableObject, переданный снаружи; view подписана наobjectWillChange, но не владеет объектом. Создавать его прямо вinitнельзя — пересоздастся при каждом обновлении родителя.@EnvironmentObject—ObservableObject, который предок положил в environment через.environmentObject(_:), и он виден всем потомкам вниз по дереву. Если объект не положили — краш в рантайме.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep