2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

get/set簡単にまとめてみた

Last updated at Posted at 2022-10-30

はじめに

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以降
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?