Swift プロパティラッパー資料まとめ

# Swift プロパティラッパーリスト

## @State
https://developer.apple.com/documentation/swiftui/state/
説明: プライベートなミュータブルな状態を持つためのプロパティラッパー。この状態の変更はビューの再描画を引き起こします。
使い方: 通常、ユーザーインターフェースの一部としてのローカルな状態を保持するために使用されます。

## @Binding
https://developer.apple.com/documentation/swiftui/Binding
説明: 他のビューから受け取った状態や値の参照を保持するためのプロパティラッパー。
使い方: 親ビューから子ビューへ状態を「バインド」して渡す場合などに使用されます。

## @ObservedObject
https://developer.apple.com/documentation/swiftui/ObservedObject
説明: ObservableObjectプロトコルを実装したオブジェクトの参照を保持するためのプロパティラッパー。オブジェクトの変更はビューの再描画を引き起こします。
使い方: カスタムのデータモデルやビューモデルをビューにバインドする際に使用されます。

## @Published
https://developer.apple.com/documentation/combine/published
説明: ObservableObjectプロトコルを実装したオブジェクトのプロパティにつけるプロパティラッパー。このプロパティの変更はオブジェクトの変更として発行されます。
使い方: クラス内の特定のプロパティの変更を監視する必要がある場合に使用します。

## @EnvironmentObject
https://developer.apple.com/documentation/swiftui/EnvironmentObject
説明: ビュー階層全体で共有されるObservableObjectのインスタンスへのアクセスを提供するプロパティラッパー。
使い方: 複数のビューにわたって共有する必要があるデータモデルやビューモデルを提供する場合に使用されます。

## @Environment
https://developer.apple.com/documentation/swiftui/Environment
説明: ビュー環境の特定の設定や値へのアクセスを提供するプロパティラッパー。
使い方: 現在のビューコンテキストや設定（例: ダークモード、アクセシビリティ設定など）にアクセスする場合に使用されます。

## @GestureState
https://developer.apple.com/documentation/swiftui/GestureState
説明: ジェスチャーの現在の状態を追跡するためのプロパティラッパー。
使い方: ドラッグやピンチなどのジェスチャーの進行中の状態を監視する際に使用されます。


## @UIApplicationDelegateAdaptor
https://developer.apple.com/documentation/swiftui/uiapplicationdelegateadaptor
説明: SwiftUIのApp本体でUIKitのUIApplicationDelegateを使用するためのアダプタ。
使い方: 既存のUIApplicationDelegateの実装をSwiftUIのAppで利用する際に使用します。

## @Environment(.scenePhase)
https://developer.apple.com/documentation/swiftui/scenephase/
説明: 現在のSceneのライフサイクル状態（アクティブ、非アクティブ、バックグラウンド）へのアクセスを提供。
使い方: アプリのシーンのライフサイクルの変更を監視する際に使用されます。

## @MainActor
https://developer.apple.com/documentation/swift/mainactor/
説明: Swift 5.5で導入されたConcurrencyの一部。この属性が付与されたメソッドやプロパティは、メインスレッド上のアクターで実行されることが保証されます。
使い方: UIの更新など、メインスレッドで実行する必要がある操作を指定する際に使用します。

## @Observable (Combineの一部 - macro)
https://developer.apple.com/documentation/observation/observable()/
説明: オブジェクトが変更を監視可能なObservableObjectであることを示す属性。
使い方: 主にデータモデルやビューモデルで使用し、ビューがデータの変更を監視できるようにします。

## @ViewBuilder
https://developer.apple.com/documentation/swiftui/viewbuilder/
説明: 複数のビューコンポーネントを組み合わせて単一のビューを返すための関数ビルダー。
使い方: 複数のビューを条件に応じて返すカスタムビューを作成する際に使用します。

## @Bindable
https://developer.apple.com/documentation/swiftui/bindable
説明: ビューモデルのプロパティをビューにバインドする際の概念として議論されることがあります。
使い方: 
```swift
struct LibraryView: View {
    @State private var books = [Book(), Book(), Book()]


    var body: some View {
        List(books) { book in
            @Bindable var book = book
            TextField("Title", text: $book.title)
        }
    }
}
```

## @FocusState
https://developer.apple.com/documentation/swiftui/focusstate/
説明: SwiftUI 3.0で導入された、現在のフォーカス状態を監視または変更するためのプロパティラッパー。
使い方: フォーカスを持つUI要素（例: テキストフィールド）のフォーカス状態を制御する際に使用します。



## @AppStorage
https://developer.apple.com/documentation/swiftui/appstorage/
説明: UserDefaultsの特定のキーにバインドされた値を読み書きするためのプロパティラッパー。
使い方: UserDefaultsに保存されている設定やデータにアクセスする際に使用します。

## @ToolbarContentBuilder
TODO:
## @ScaledMetric
TODO:
## @ObservationIgnored
TODO:
## @SceneStorage
TODO:

# SwiftData
https://developer.apple.com/documentation/SwiftData
## @Model
Converts a Swift class into a stored model that’s managed by SwiftData.
Swift クラスを、SwiftData によって管理されるストアド モデルに変換します。

## @Attribute(.unique)
説明: Primary key
使い方:@Attribute(.unique) var name: String

## @Query (SwiftDataに関連するもの)
https://developer.apple.com/documentation/swiftdata/query/
説明: SwiftDataの一部として提供されるデータモデルのクエリ結果を監視するためのプロパティラッパー。
使い方: データベースの特定のクエリの結果を監視する際に使用します。