LoginSignup
0
2

More than 3 years have passed since last update.

[Swift]プロパティについて

Posted at

はじめに

前回の記事にプロパティのことを説明しました。
しかし、プロパティの分類の仕方がもう一つあるのでそれについて紹介します。

プロパティの分類

プロパティは、値を保持するストアドプロパティと、値を保持しないコンピューテッドプロパティがあります。今回はその2つについて説明していきます。

ストアドプロパティ

以下のtateやyokoのプロパティは、ストアドプロパティです。

struct Area{
    var tate=10
    var yoko=10
}
var A_1=Area()//インスタンス化
var A_2=Area()//インスタンス化
A_1.tate=3
A_2.tate=7
print(A_1.tate)//3
print(A_2.tate)//7

ここで、プロパティの値が変更されるとき、変更前と変更後に値を監視する機能があります。

struct Area{
    var tate=10{
        willSet{
            print("old numver=",self.tate)
        }
        didSet{
            print("new number=",self.tate)
        }
    }
    var yoko=10
}
var A_1=Area()
A_1.tate=3

//実行結果
//old numver=10
//new number=3

willSetの{}では、プロパティの変更前に実行されます。
didSetの{}では、プロパティの変更後に実行されます。
また、このような仕組みをプロパティオブザーバと言います。

コンピューテッドプロパティ

コンピューテッドプロパティは、プロパティを初期化せずに、なんらかの計算をして値を返すプロパティです。
そして、そのプロパティにアクセスするタイミングで、値を保存することができます。
ほとんど関数みたいなもんですね

struct Area{
    var yoko=10
    var tate:Int{
        get{
            return yoko
        }
        set{
            self.yoko=newValue+2
        }
    }
}
var A_1=Area()
A_1.tate=9
print(A_1.tate)//11

プロパティに代入するときはset{}が呼び出されて、A_1.tateみたいに値にアクセスする時(代入する時以外)はget{}が呼び出されます。
A_1.tateでは9を代入しているのでSet{}が呼び出されます。
その時、9にアクセスするにはnewValueを用います。newValue=9です。
それがyokoに代入されるのでyoko=11になります。
最後に,A_1.tateにアクセスしているのでget{return yoko}が実行されます。
yoko=11なので実行結果は11になります。

また、set{}は省略可能で、get{}は必須です。

0
2
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
0
2