0Pricing
Swift Academy · レッスン

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

格納プロパティと計算プロパティを定義し、読み取り専用およびget/setの計算プロパティを作成して、willSet/didSetオブザーバーで変更に対応します。

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

概要

このレッスンでは、格納プロパティと計算プロパティを比較し、変更に反応するwillSet/didSetオブザーバーについて説明します。

格納プロパティと計算プロパティ

格納プロパティはデータを保持します。計算プロパティは、アクセスされたときに値を計算します。

struct Rectangle {
    // stored properties (hold data)
    var width: Double
    var height: Double

    // computed property (derived on access)
    var area: Double {
        return width * height   // read-only computed
    }
}
let r = Rectangle(width: 3, height: 4)
print("area =", r.area)  // 12

計算プロパティのget/set

get/setを追加すると、関連する不変条件を同期させられる読み書き可能な計算プロパティを作成できます。

struct Circle {
    var radius: Double           // stored
    var diameter: Double {       // computed read-write
        get { radius * 2 }
        set { radius = newValue / 2 }
    }
}
var c = Circle(radius: 5)
print(c.diameter)   // 10
c.diameter = 14
print(c.radius)     // 7

オブザーバーの動作

オブザーバーは、格納プロパティの変更前後に実行されます。状況を把握するには、newValue/oldValueを使用します。

struct Counter {
    var value: Int = 0 {
        willSet { print("will set to", newValue) }
        didSet  { print("did set from", oldValue) }
    }
}
var cnt = Counter()
cnt.value = 5
cnt.value = 9

オブザーバーと計算プロパティ

注記:

  • オブザーバーは格納プロパティに適用されます(拡張で設定するプロパティも含まれます)。
  • 計算プロパティはオブザーバーをサポートしないため、代わりにsetにロジックを記述します。
  • ストレージの準備が整っていない初期化中は、オブザーバーは呼び出されません。

実践的なパターン

オブザーバーで入力を正規化し、計算プロパティで表示用データを導出します。

struct Score {
    var raw: Int = 0 {
        didSet {
            if raw < 0 { raw = 0 }
            if raw > 100 { raw = 100 }
        }
    }
    var label: String {
        // computed: derive a label from current raw
        if raw >= 90 { return "A" }
        if raw >= 80 { return "B" }
        if raw >= 70 { return "C" }
        return "D"
    }
}
var s = Score()
s.raw = 120
print(s.raw, s.label)   // 100 A
s.raw = -5
print(s.raw, s.label)   // 0 D

オブザーバーのルール

確認問題:格納プロパティが変更される前後に実行されるものは何でしょうか?

まとめ

まとめ:データには格納プロパティ、導出値には(get/setを備えた)計算プロパティを使用し、格納プロパティの変更にはwillSet/didSetで反応します。

よくある質問

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

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

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

格納プロパティと計算プロパティを定義し、読み取り専用およびget/setの計算プロパティを作成して、willSet/didSetオブザーバーで変更に対応します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

  1. 構造体とクラス、プロパティ、初期化子
  2. 格納プロパティと計算プロパティ、オブザーバー
  3. 初期化子とdeinit(クラス)
← Swift Academyに戻る