Property Wrapper (“Обертка Свойства”) — это просто структура struct, в которую встроен некоторый шаблон “поведения” переменной var, которую эта структура struct “оборачивает”. Реализация дизайн паттерна - декоратора.
Благодаря этому мы наконец-то поймем, что такие вещи как @State, @StateObject, @Published, @ObservedObject и другие @штуковины делают под «капотом»
Список 17ти SwiftUI Property Wrappers:
-
@AppStorage читает и записывает значения из UserDefaults;
-
@Binding относится к данным типа значения, принадлежащим другому представлению. Локальное изменение привязки также изменяет удаленные данные;
-
@Environment позволяет нам считывать данные из системы, такие как цветовая схема, параметры доступности и коллекции черт, но вы можете добавить сюда свои собственные ключи, если хотите;
-
@EnvironmentObjecе читает общий объект, который мы поместили в среду;
-
@FetchRequest запускает запрос на получение основных данных для определенного объекта;
-
@FocusedBinding предназначен для наблюдения за значениями в ключевом окне, например, в текстовом поле, которое выбрано в данный момент;
-
@FocusedValue является более простой версией, @FocusedBindingкоторая не разворачивает связанное значение для вас;
-
@GestureState хранит значения, связанные с жестом, который в данный момент выполняется, например, насколько далеко вы провели пальцем, за исключением того, что он будет сброшен до значения по умолчанию, когда жест остановится;
-
@Namespace создает пространство имен анимации, позволяющее совмещать эффекты геометрии, которые могут использоваться другими представлениями;
-
@NSApplicationDelegateAdaptor используется для создания и регистрации класса в качестве делегата приложения для приложения macOS;
-
@ObservedObject относится к экземпляру внешнего класса, который соответствует протоколу ObservableObject;
-
@Published прикрепляется к свойствам внутри ObservableObjectи сообщает SwiftUI, что он должен обновлять все представления, использующие это свойство, при его изменении;
-
@ScaledMetric считывает настройку динамического типа пользователя и масштабирует числа в большую или меньшую сторону в зависимости от предоставленного вами исходного значения;
-
@SceneStorage позволяет сохранять и восстанавливать небольшие объемы данных для восстановления состояния;
-
@State позволяет нам манипулировать небольшими объемами данных типа значения локально в представлении. @State заставляет переменную var “жить” в “куче” (heap), делая её writable в View, то есть дает возможность “писать” в нее новые значения в противоположность обычным переменным var в View, которые являются unwritable (только для чтения);
-
@StateObject используется для хранения новых экземпляров данных ссылочного типа, которые соответствуют протоколу ObservableObject;
-
@UIApplicationDelegateAdaptor используется для создания и регистрации класса в качестве делегата приложения для приложения iOS;