SwiftUIの@Stateや@Bindingなどのプロパティラッパーを使うときに登場するwrappedValueについて解説します。

wrappedValueとは?
wrappedValueは、プロパティラッパーの本質的な値を表します。プロパティラッパーは、通常のプロパティに追加の機能を付与するためのメカニズムです。wrappedValueプロパティを通じて、ラップされている元の値にアクセスしたり、変更したりすることができます。
プロパティラッパーの基本構造
Swiftのプロパティラッパーは、@propertyWrapperアノテーションを使って定義されます。
以下は、基本的なプロパティラッパーの例です。
@propertyWrapper
//先頭の文字を大文字にする
struct Capitalized {
private var value: String
var wrappedValue: String {
get { value }
set { value = newValue.capitalized }
}
init(wrappedValue: String) {
self.value = wrappedValue.capitalized
}
}Capitalizedプロパティラッパーは文字列を先頭を大文字化して保存します。wrappedValueを通じて、その保存された値にアクセスできます。
使用例
このプロパティラッパーを使ってみましょう。
struct WrappedValueSmp: View {
@Capitalized var name: String = "swiftui"
var body: some View {
Text(name) // "Swiftui"と表示されます
}
}@Capitalizedを使うことで、nameプロパティが自動的に大文字化されることが保証されます。
SwiftUIにおける実用例
SwiftUIでは、@Stateや@Binding、@ObservedObjectなど、さまざまなプロパティラッパーが提供されています。
これらもwrappedValueを使って本質的な値にアクセスしています。
@Stateや@Bindingについて以下の記事にまとめています。
まとめ
wrappedValueはプロパティラッパーの中心的な機能であり、ラップされた値にアクセスするためのインターフェースです。
SwiftUIの@Stateや@Binding、カスタムプロパティラッパーなどで広く使用されており、状態管理や値のバインディングにおいて重要な役割を果たしています。
プロパティラッパーを理解することで、よりリッチで動的なUIを構築することが可能になります。


