#■計算されたプロパティ
■基本
コンピューテッドプロパティは、プロパティ自身では値を保存せず、すでに存在するストアドプロパティ
などから計算して値を返すプロパティです。
関数に似ている。
■書き方
var 変数名:型名 {
get {
return 文によって値を返す処理
}
set {
値を更新する処理
プロパティに代入された値には定数newValueとしてアクセスできる
}
}
#■getとset
コンピューテッドプロパティにはgetとsetというものがある。
■get
ほかのストアドプロパティなどから値を取得して、コンピューテッドプロパティの値として返す処理です。
と書いてる
■細かく言うと
コンピューテッドプロパティにアクセスした時にgetの中で他のストアドプロパティを使って計算文を書いてそれの計算結果をreturnで返す。
getするぜ!!
■set
プロパティに代入された値を使用して他のストアドプロパティを更新する。
ここ重要:他のストアドプロパティを更新する!!
■細かく言うと
コンピュテッドプロパティに新たな値が代入されました。
その新たな値はsetの中にsetの特殊引数(newValue)としてされます。
newValueの型はコンピュテッドプロパティの型と同じものです。
setするぜ!
#■とりあえずコードを書いてみよう!
//他のストアドプロパティ
var price = 100
var taxRate = 1.08
//コンピューテッドプロパティ
var taxPrice:Double {
get{ return Double(price) * taxRate}
set{ price = Int(newValue * 3)}
}
//ただ単にコンピュテッドプロパティにアクセス
print(taxPrice)
//結果: 108.0
//コンピュテッドプロパティに値を代入してるからsetが呼ばれ値は引数のnewValueになる。
//他のストアドプロパティpriceが変更されている。
taxPrice = 200
//priceの値が変更されてから新たな値がreturnされている。
print(taxPrice)
//結果: 648.0
#■縮めた書き方
var price = 100
var taxRate = 1.08
//getのみでも書ける。
var taxPrice:Double {
get{ return Double(price) * taxRate}
}
//getとreturnを省いてもgetとなり同じ動きになる。
var taxPrice:Double {
{ Double(price) * taxRate}
}
注意:setのみを書くことはできないsetを使うときは必ずgetが必要
#■カプセル化(変更しないように)
コンピューテッドプロパティは値をカプセル化もできる。
getはただ単に中身の値を返すものなのでgetだけの場合使用上中身を絶対変更できない。
var loginkey:String {"key"}
//変更しようとするとエラー
loginkey = "aaa"
//エラー:Cannot assign to value: 'aaa' is a get-only property
//getしかないでそこ代入できへんってマジでって言ってそう...
とりあえずアウトプットです。
何かあればまた更新します。