Поскольку оболочки свойств были предложением Swift Evolution и были разработаны как часть философии открытого кода Swift, мы можем найти лучшую документацию непосредственно в документе Предложение SE-0258 . Здесь описывается обоснование дизайна @propertyWrapper
и точная спецификация того, как они реализованы (включая определения упакованных значений и прогнозируемых значений ).
Разделы, которые могут помочь в вашем понимании:
§ Тип оболочки свойства предоставляет хранилище для свойства, которое использует его в качестве оболочки. Свойство wrappedValue
типа оболочки обеспечивает фактическую реализацию оболочки, а (опционально) init(wrappedValue:)
включает инициализацию хранилища по значению типа свойства.
Использование префикса _
для имени синтезированного свойства хранилища является преднамеренным: оно предоставляет предсказуемое имя для синтезированного свойства хранилища, которое соответствует установленным соглашениям для частных хранимых свойств.
[...]
§ Тип оболочки свойства может предоставить свойство проекции (например, $foo
), чтобы предоставить больше API для каждого свойства обертки, определив свойство projectedValue
. Как и в случае свойств wrappedValue
и init(wrappedValue:)
, свойство projectedValue
должно иметь тот же уровень доступа, что и его тип оболочки свойства.
Поскольку оболочки свойств являются новыми для Swift в целом, на мой взгляд, документации по-прежнему не хватает на стороне Apple, особенно когда речь идет о SwiftUI. Однако есть только несколько обёрток свойств, о которых мы действительно должны знать (@State
, @Binding
, @EnvironmentObject
, @ObservedObject
, @Published
), чтобы полностью использовать SwiftUI; все другие аспекты SwiftUI (такие как View
типы) довольно хорошо документированы в документах Apple для разработчиков.
Кроме того, статьи, опубликованные в сообществе Swift ( пример ), могут помочь вам получить gr asp о том, где вы можете захотеть реализовать обёртки свойств самостоятельно!