Проекции property wrapper позволяют property wrapper предоставлять дополнительную функциональность сверх самого обёрнутого значения. Доступ к ней осуществляется через синтаксис с префиксом $.
Когда ты определяешь property wrapper, ты можешь опционально реализовать свойство projectedValue внутри него:
@propertyWrapper
struct MyWrapper<T> {
var wrappedValue: T
var projectedValue: String { "extra info" }
}
Когда ты аннотируешь свойство этим wrapper'ом, Swift автоматически делает проецируемое значение доступным через префикс $ на имени этого свойства.
@State var name: String — $name возвращает Binding<String>, обеспечивая двусторонний поток данных@Published var score: Int — $score возвращает Publisher, позволяя отслеживать изменения значения@FocusState var isFocused: Bool — $isFocused возвращает Binding<Bool> для программного управления фокусомname) даёт тебе прямой доступ к базовым данным$name) предоставляет дополнительные возможности, определённые wrapper'ом$name полностью зависит от того, что wrapper определяет как свой projectedValueЭтот паттерн делает API property wrapper'ов чистым и выразительным. Вместо того чтобы заводить отдельные переменные или вспомогательные методы, префикс $ даёт тебе лаконичный и единообразный способ получить доступ к расширенному поведению — например, к binding'ам, publisher'ам или состоянию валидации — прямо рядом со свойством, к которому оно относится.
Свойство projectedValue в property wrapper обязательно и должно быть реализовано, чтобы wrapper работал корректно.
Новый — ещё не проверен сообществом
Вы