【Swift】Computedプロパティ(計算プロパティ)の使い方。(Swift 2.1、XCode 7.2)

2020年6月16日

Computedプロパティとは

Computedプロパティ(計算プロパティ)とは、関数を通してクラスのプロパティを取得、設定する機能のことをいい、以下のように定義する。

 

普段使うプロパティはStoredプロパティ(格納プロパティ)と呼ばれ、プロパティの値を取得、設定するときは以下のコードのように「インスタンス名.プロパティ名」でアクセスし、値は直接設定される。

 

一方、Computedプロパティを使うと、「インスタンス名.プロパティ名」でアクセスしたときに、値を取得するときはgetメソッド、値を設定するときはsetメソッドが自動で呼び出される。

例えば、以下はゲームの成績を記録するクラスの例で、打撃回数(hit_number)がComputedプロパティになる。

インスタンスを使う側は「インスタンス名.hit_number」のようにアクセスするので、打撃回数そのものにアクセスしているかのように感じるが、実際は、getメソッド、または、setメソッドを処理した結果が取得、計算されている。

このようにComputedプロパティは、他のプロパティの値をもとに算出できてしまう場合や、プロパティにアクセスする直前に何かしらのチェックや計算が必要な場合に利用できる。

引数やメソッドを省略する

setメソッドに定義した引数名は、名前にこだわりが無ければ省略できる。省略した場合はnewValueという引数名になる。プロパティ名や引数名など似たような名前を定義すると紛らわしいので、setメソッドの引数名は常に省略したほうがスッキリして良い。

 

以下のコードのように、setメソッド自体を省略することもできる。省略すると打撃回数(hit_number)の値を設定することができなくなり、取得専用のプロパティになる。

 

もし、setメソッドを省略したComputedプロパティに値を設定しようとするとコンパイルエラーになる。

 

また、getのみのComputedプロパティにしたからといって、以下のコードのようにプロパティをlet(定数)で宣言することはできない。なぜなら、setメソッドが無くなってプロパティの値を変更できなくなったが、getメソッド内の処理によってはいつも同じ値が取得されるとは限らないので「定数では無い」ということである。