プロパティはクラス・構造体・列挙型に値を結びつけます。ストアドプロパティは定数や変数の値をインスタンスの一部として格納し、一方コンピューテドプロパティは値を計算します。コンピューテドプロパティはクラス・構造体・列挙型に存在し、ストアドプロパティはクラスと構造体に存在します。
ストアドプロパティとコンピューテドプロパティは通常特定の型のインスタンスに結びつけられます。しかしインスタンスではなく型そのものに結びつけられるプロパティもあります。タイププロパティとして知られています。
さらにプロパティの値の変化を検知するプロパティオブザーバと、変化に対応する独自の挙動を定義することができます。プロパティオブザーバーはあなたが定義したストアドプロパティに対して用意できます。さらにサブクラスがスーパークラスから継承したプロパティに対しても用意できます。
さらにゲッター・セッターとして用意したコードを、複数のプロパティに対して利用できる「プロパティラッパー」もあります。
ストアドプロパティ
ストアドプロパティは特定のクラス・構造体のインスタンスの一部としての定数・変数です。ストアドプロパティは変数のストアドプロパティ(varキーワードを使用)、定数のストアドプロパティ(letキーワードを使用)どちらも使用できます。
ストアドプロパティを宣言と同時に初期値を設定することができます。
下のサンプルはFixedLengthRangeという名の構造体を定義しています。整数の範囲を表す構造体で、インスタンス生成後範囲の変更はできないものです。
struct FixedLengthRange { var firstValue: Int let length: Int } var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3) // the range represents integer values 0, 1, and 2 rangeOfThreeItems.firstValue = 6 // the…