Skip to content

Latest commit

 

History

History
47 lines (23 loc) · 6.5 KB

File metadata and controls

47 lines (23 loc) · 6.5 KB

Property Wrapper

  1. All SwiftUI property wrappers explained and compared

Property Wrapper (“Обертка Свойства”) — это просто структура struct, в которую встроен некоторый шаблон “поведения” переменной var, которую эта структура struct “оборачивает”. Реализация дизайн паттерна - декоратора.

Благодаря этому мы наконец-то поймем, что такие вещи как @State, @StateObject, @Published, @ObservedObject и другие @штуковины делают под «капотом»

PropertyWrappers

Список 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;