0Pricing
Swift Academy · レッスン

格納プロパティとプロパティオブザーバー

プロパティの変更に反応するdidSetとwillSetのオブザーバーを学びます。

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

ようこそ

格納プロパティは、構造体やクラスの内部に値を保持します。プロパティオブザーバーである `willSet` と `didSet` を使うと、格納プロパティの値が変化したときに処理を実行できます。

格納プロパティ

```swift struct Counter { var count: Int = 0 // stored, mutable let name: String // stored, immutable } ``` 型の内部で `let` または `var` を使って代入する値は、すべて格納プロパティです。

didSet オブザーバー

```swift struct Gauge { var level: Int = 0 { didSet { print("Changed from \(oldValue) to \(level)") } } } var g = Gauge() g.level = 5 // "Changed from 0 to 5" ``` `oldValue` には、以前の値が自動的に渡されます。

willSet オブザーバー

```swift struct Slider { var value: Double = 0.5 { willSet { print("About to change to \(newValue)") } } } ``` `newValue` には、これから設定される値が自動的に渡されます。`willSet` は代入の前に実行されます。

両方のオブザーバーを同時に使う

```swift var temperature: Double = 20 { willSet { print("Will become \(newValue)") } didSet { print("Was \(oldValue)") } } temperature = 25 // Will become 25.0 // Was 20.0 ```

didSet による値のクランプ

```swift var volume: Int = 50 { didSet { if volume > 100 { volume = 100 } if volume < 0 { volume = 0 } } } volume = 150 // clamped to 100 ``` 不変条件を自動的に適用するための、すっきりしたパターンです。

サブクラスでのオブザーバー

プロパティオブザーバーは、継承したプロパティにも使用できます。 ```swift class Base { var x: Int = 0 } class Child: Base { override var x: Int { didSet { print("x changed to \(x)") } } } ```

イニシャライザではオブザーバーは実行されない

```swift struct Model { var value: Int = 0 { didSet { print("changed") } } init(v: Int) { self.value = v } // does NOT trigger didSet } ``` `init` 内で行われる初期代入では、オブザーバーは実行されません。

格納プロパティと計算プロパティの違い

• 格納: `var x: Int = 0` — 実際の記憶領域を保持します • 計算: `var doubled: Int { x * 2 }` — アクセス時に値を導出し、記憶領域を持ちません • オブザーバー: 格納プロパティに付加され、変更に反応します 計算プロパティにはオブザーバーを追加できません(すでに `get` / `set` を持っているためです)。

パフォーマンスに関する注意

プロパティオブザーバーは、書き込みのたびに関数呼び出しのオーバーヘッドを追加します。高頻度で書き込みを行う場合(ゲームループの物理演算など)は、パフォーマンスを高めるために、通常の格納プロパティを使い、更新処理を明示的に呼び出すことを検討してください。

確認問題

**以前の**値にアクセスできるプロパティオブザーバーはどれでしょうか?

まとめ

主なポイント: • 格納プロパティは値を直接保持します • `willSet` は新しい値が格納される前に実行され、`newValue` が提供されます • `didSet` は格納された後に実行され、`oldValue` が提供されます • `init` 中はオブザーバーは実行されません • UI の更新、ログ出力、検証などの副作用に適しています 次は、計算プロパティです。

よくある質問

「格納プロパティとプロパティオブザーバー」レッスンは無料ですか?

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

「格納プロパティとプロパティオブザーバー」で何を学びますか?

プロパティの変更に反応するdidSetとwillSetのオブザーバーを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「格納プロパティとプロパティオブザーバー」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. メンバー単位のイニシャライザとカスタムイニット
  2. 格納プロパティとプロパティオブザーバー
  3. 構造体の計算プロパティ
  4. ミューテーティングメソッドとコピーオンライトのセマンティクス
← Swift Academyに戻る