はじめに
get/set・didSet/willSet先に呼ばれるのはどっち?どう呼ばれるの?呼ばれる際にどういうことはできるの?そんな超基本的な使い方を簡単にまとめることとする。間違い・補足等があればコメントください。
get/setの詳細
下記コードのように変数や定数の後に{}があるものをコンピューテッドプロパティという。
コンピューテッドプロパティとは値を自分自身で持たない変数のことである、ちなみに、ptorocolでの変数定義の際、同じような表現方法のためセットで覚えておくと良いかも。また、それとは逆にストアドプロパティと呼ばれる変数がある。こちらは値を自分自身で持つ変数のことである。
- getは読み取り専用/setは書き込み専用と理解しておく
- setが先に呼ばれ、setでセットした値はnewValueに格納される
- そのため、処理の順番はsetで値を書き込む → その書き込んだ値を元にget値を取得するというイメージ
Swift
//ストアドプロパティ
var stored: Int = 1 //今回は使わない
//コンピューテッドプロパティ
protocol computed {
var taxPrice: Int {get set}
}
//定義(税抜、税込を想定したクラス)
class Price: computed {
//ストアドプロパティ 今回、setが呼ばれることによってここの値が変化していく
var noTaxPrice: Int = 100
//コンピューテッドプロパティ ここで値をあれこれする
var taxPrice: Int {
//setが呼ばれた場合2番目に呼ばれる処理
get {
return noTaxPrice * 2
}
//setが呼ばれた場合1番目に呼ばれる処理
//インスタンス化し、taxPriceに新たに値をセットした際はnewValueに格納される。
//値はnewValueに格納されるのであって、taxPriceには格納されない。
set{
self.noTaxPrice = newValue / 2
}
}
}
//インスタンス化
let price = Price()
//set{}が呼ばれる、この300はnewValueへ格納される
price.taxPrice = 300
//出力
//setが呼ばれた場合、self.noTaxPrice = newValue / 2 の計算結果がnoTaxPriceプロパティに格納される
print(price.noTaxPrice) //150
//set → get の順で呼ばれる
print(price.taxPrice) //300
おわりに
むずかしい。
参考記事
【swift】get、setってなんのこと?
Swift : 変数の後に{ }・・これはComuputedプロパティ(get/set)というものです。
開発環境
- Xcode-13.4.1
- iOS13以降