Swiftのプロパティ(Properties)

Swiftのプロパティ(Properties)

プロパティ(Properties)です。基本的には変数や定数のことですが、ある特定の型(クラスなど)が保有している変数などを、特別にプロパティと呼んでいます。

ここでは、プロパティとは何か?という概観から始めて、変数や定数である格納プロパティ(Stored Properties)、値を計算するための計算プロパティ(Computed Properties)、保有しているプロパティの監視をするプロパティオブザーバ(Property Observers)、さらに型自体に付随する型プロパティ(Type Properties)について、詳しく説明します。

プロパティ(Properties)って何?

Swiftにおけるプロパティ(Properties)とは、クラス(classes)、構造体(structures)、または列挙型(enumerations)内部で定義される変数や定数等のことです。英語の単数形だとpropertyで、訳は「財産、所有物、特性」などですが、ここでは「所有物」が一番近いでしょうか?つまり、ざっくり言うと、

プロパティは型(というスコープ)に限定された変数などのこと

を指します。

「変数など」という風にお茶を濁したのは理由があって、実はプロパティは3種類あります。そのうちの1つが、一般的な変数や定数に該当します。以下の表に、Swiftのプロパティをまとめました。

種類 使える型 所有者
格納プロパティ(Stored Properties) クラス、構造体 インスタンス
計算プロパティ(Computed Properties) クラス、構造体、列挙型 インスタンス
型プロパティ(Type Properties) クラス、構造体、列挙型

これまで出てきた変数や定数は、保存(記憶)プロパティ(stored properties)になります。それ以外にも、計算プロパティ(computed properties)という計算機能を保存(保有)するプロパティや、型プロパティ(type properties)という型自体に付随するプロパティもあります。

さらに、プロパティオブザーバ(property observers)という機能もあります。これは、プロパティへの変更を観測(監視)する(observe)ための機能です。詳しくは後述します。

グローバル変数、ローカル変数

グローバル変数とローカル変数の定義

ここで紹介する計算機能(computed properties)や観測機能(property observers)は、グローバル変数(Global Variables)ローカル変数(Local Variables)でも使えます。グローバル変数とローカル変数の定義は、以下のようになります。

  • グローバル変数は、関数、メソッド、クロージャ、または型の外側で定義される変数
  • ローカル変数は、関数、メソッド、クロージャ内部で定義される変数

これまでに別のページで紹介してきた変数は、全て保存変数(stored variables)に該当します。これは、格納プロパティとの類推で理解できると思います。Stored variablesは、ある特定の型の値を保持し、その値を取り出したり、別の値をセットしたりできる箱のようなものです。

計算プロパティに対応する機能が、計算変数(computed variables)になります。機能は計算プロパティと同様で、それのグローバル(ローカル)変数バージョンです。

グローバル定数(変数)はlazy

公式マニュアルに注意書きがありますが、グローバル定数(グローバル変数も)はlazyプロパティ(lazy stored properties)と同様に、実際に使われるまで初期化されないようです。ただし、明示的にlazy指定する必要はありません。一方、ローカル定数(ローカル変数)は、直ちに初期化されます(lazy指定できない)。

Lazy stored propertiesに関しては後述します。

“NOTE

Global constants and variables are always computed lazily, in a similar manner to Lazy Stored Properties. Unlike lazy stored properties, global constants and variables do not need to be marked with the lazy modifier.

Local constants and variables are never computed lazily.”

抜粋:: Apple Inc. “The Swift Programming Language (Swift 2.2)”。 iBooks https://itun.es/jp/jEUH0.l

次からは、具体的に格納プロパティや計算プロパティに関して、その定義と使い方を詳しく見ていきます。

Swiftの格納プロパティ