0Pricing
Swift Academy · レッスン

$bindingによる射影値

projectedValueを公開し、$プレフィックス経由で追加機能を提供します。

「$bindingによる射影値」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

投影値(`$`でアクセスします)によって、プロパティラッパーに第2のインターフェースを持たせられます。SwiftUIの`@State`や`@Published`は、これを使って`Binding`や`Publisher`を公開します。

projectedValueの追加

```swift @propertyWrapper struct Toggle { var wrappedValue: Bool = false var projectedValue: String { wrappedValue ? "ON" : "OFF" } } struct Model { @Toggle var active } var m = Model() print(m.$active) // "OFF" — projected value accessed with $ ```

projectedValueの型

投影値には、`Binding`、`Publisher`、`String`、カスタム型など、任意の型を指定できます。 SwiftUIの`@State`は、双方向のデータフローを可能にする`Binding`を投影します。

Bindingへの投影例

```swift // @State projects Binding: @State var isOn = false Toggle(isOn: $isOn) // $isOn is Binding ```

カスタムBindingへの投影

```swift @propertyWrapper struct Validated { var wrappedValue: String var projectedValue: Bool { !wrappedValue.isEmpty } } struct Form { @Validated var email = "" } var f = Form() f.email = "hi@example.com" print(f.$email) // true — projected Bool ```

@Publishedの投影

```swift class VM: ObservableObject { @Published var score = 0 } let vm = VM() let cancellable = vm.$score // Publisher .sink { print("Score: \($0)") } vm.score = 10 // "Score: 10" ```

ラッパー内部でのprojectedValueへのアクセス

```swift @propertyWrapper struct History { private var current: T private(set) var projectedValue: [T] = [] var wrappedValue: T { get { current } set { projectedValue.append(current); current = newValue } } init(wrappedValue: T) { current = wrappedValue } } ```

Historyラッパーの使用

```swift struct Counter { @History var count = 0 } var c = Counter() c.count = 1; c.count = 5; c.count = 3 print(c.$count) // [0,1,5] — history of old values ```

$構文の使い分け

```swift struct Form { @State var text = "" var body: some View { TextField("Enter", text: $text) // $text is Binding } } // text → String (wrappedValue) // $text → Binding (projectedValue) ```

設計上の考慮事項

• `projectedValue`は任意です。第2のインターフェースが必要な場合だけ追加してください • 型は`wrappedValue`とは完全に異なるものにできます • 呼び出し側では`$`を使って投影値にアクセスします • 投影値は、CombineのパブリッシャーやSwiftUIのバインディングに適しています

確認問題

プロパティラッパーの`projectedValue`には、どのようにアクセスしますか?

まとめ

重要なポイント: • `projectedValue`によって、ラッパーに`$`経由の第2のAPIを持たせられます • 型は任意で、Binding、Publisher、Bool、Arrayなどを指定できます • `@State`は`Binding`を投影し、`@Published`は`Publisher`を投影します • 本体と呼び出し側の両方で、`$propertyName`を使ってアクセスします • 第2のインターフェースに実際の価値がある場合だけ追加してください 次は、@PublishedとCombineです。

よくある質問

「$bindingによる射影値」レッスンは無料ですか?

はい。「$bindingによる射影値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「$bindingによる射影値」で何を学びますか?

projectedValueを公開し、$プレフィックス経由で追加機能を提供します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「$bindingによる射影値」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. カスタムプロパティラッパーの作成
  2. $bindingによる射影値
  3. Combineにおける@Publishedとオブザベーション
  4. 複数のプロパティラッパーの合成
← Swift Academyに戻る