2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-10-22

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
説明: ビューモデルのプロパティをビューにバインドする際の概念として議論されることがあります。
使い方:

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

@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の一部として提供されるデータモデルのクエリ結果を監視するためのプロパティラッパー。
使い方: データベースの特定のクエリの結果を監視する際に使用します。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?