Property
computed property
getter,setter メソッドを使って計算された値でstored propertyを変更したり、計算された値を取得したりする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
struct Time { var hour:Double var minute:Double var second:Double init(){ self.hour = 0 self.minute = 0 self.second = 0 } mutating func addTime(hour:Double,minute:Double){ self.hour += hour self.minute += minute } func description() -> String{ return "\(self.hour):\(self.minute):\(self.second)" } var day:Double { get{ return (self.hour * 60.0 * 60.0 + self.minute * 60.0 + self.second) / 60.0 * 60.0 * 24.0 } set{ let secondsall:Double = newValue * 60.0 * 60.0 * 24.0 self.hour = secondsall / (60.0 * 60.0) self.minute = (secondsall - self.hour * 60 * 60) / 60.0 self.second = secondsall - self.hour * 60 * 60 - self.minute * 60 } } } var tm:Time = Time() tm.day = 0.65 let tmdesc:String = tm.description() |
getter呼び出し時にstored propertyの値を変更する場合は muting
をつける。
subscript
構造体の値を添え字を使って値を取得、挿入する。
|
struct Curry { var type = ["欧風","スパイス","インド","タイ"] subscript(i:Int) -> String { get{return type[i]} set{type[i]=newValue} } } var curry:Curry = Curry() println(curry.type[2]) //インド curry[2]="インデアン" println(curry.type[2]) //インデアン |
property observer
プロパティーに値がセットされることをトリガーに処理を行う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
struct Curry { var price:Int = 600 var hotFlavor:Int = 1{ willSet{ if newValue > 3 && self.hotFlavor <= 3 { self.price += 100 } else if newValue <= 3 && self.hotFlavor > 3 { self.price -= 100 } } didSet{ println("\(oldValue)から変更されました。") } } } var curry:Curry = Curry() println(curry.price) curry.hotFlavor = 4 println(curry.price) |
関連