Property
Swift
Swift2.2

Stored property と Computed property

More than 1 year has passed since last update.

格納型プロパティ(Stored property)、計算型プロパティ(Computed property)についてメモ


そもそもプロパティって


クラスや構造体、列挙体等で定義することができる定数/変数のこと。


格納型プロパティ (Stored property)



Structure

struct ExampleStructure {

var Variable: Int
let Constant: String
}

インスタンスの一部として定数/変数を格納する。

※構造体定義で例示している理由は、クラスで上記を定義すると

スクリーンショット 2016-08-29 1.38.55.png

初期化処理がないとエラーが吐かれる。


Class

class ExampleClass {

var variable:Int
let constant: String

init(variable: Int, constatnt: String){
self.variable = variable
self.constant = constant
}
}


クラスだと上記のように定義するか、初めから初期値を設定する。


Class_2

class ExampleClass_2 {

var variable = 10
let constant = "Constant"
}

こんな感じ


計算型プロパティ (Computed property)


決まった値を保持しておらず、

インスタンスが生成される度に別プロパティから計算されて値を取得、設定されるプロパティで

getter/setterがある

※getterは単独で定義できるがsetterはgetterとセットでないと定義できない。


getter


class AreaOfTriangle {

var base: Int
var height: Int

init(base: Int, height: Int) {
self.base = base
self.height = height
}

var triangle: Int {
get{
return base * height / 2
}
}
}

returnした値がtriangleに格納される。

ちなみにgetterのみの場合はget{}を省略できる。

getが読み込み専用というのはtriangleという変数そのものに値を代入(格納)することができないため。

アクセスすることしかできない。


setter


なぜかこのsetterがわかりづらかった。。。

インスタンス化された後computed propertyに別の値がセットされた時(値が代入された時)に呼ばれる。

※getはインスタンス化された時や、setによってgetで使っている値が変更された時に呼び出され、値が設定される。

class AreaOfTriangle {

var base: Int
var height: Int

init(base: Int, height: Int) {
self.base = base
self.height = height
}

var triangle: Int {
get {
return base * height / 2
}

set(t) {
base = t * 2
height = t * 2
}
}
}

var a = AreaOfTriangle(base: 2,height: 2)
a.triangle = 5
print("\(a.base) , \(a.height)") //10 , 10

インスタンス化された後computed property(ここではtriangle)に別の値がセットされた時(値が代入された時)に呼ばれる。

※getはインスタンス化された時や、setによってgetで使っている値が変更された時に呼び出され、値が設定される。

動きとしては引数tに5が代入される。

そして以下のように、引数の代わりにnewValueを指定することもできる。

  set {

base = newValue * 2
height = newValue * 2
}


まとめ


計算型プロパティのsetterが自分の中で消化できなかったので調べて書いてみました。

間違いや例示したものが適切でない等ありましたらどしどしご指摘ください。