Swift 計算屬性

計算屬性get

除存儲屬性外,類、結構體和枚舉能夠定義計算屬性,計算屬性不直接存儲值,而是提供一個 getter 來獲取值,一個可選的 setter 來間接設置其餘屬性或變量的值。it

struct Point {
  var x = 0.0, y = 0.0
}
struct Size {
  var width = 0.0, height = 0.0
}
struct Rect {
  var origin = Point()
  var size = Size()
  var center: Point {
  get {
     let centerX = origin.x + (size.width / 2)
     let centerY = origin.y + (size.height / 2)
     return Point(x: centerX, y: centerY)
   }
  set(newCenter) {
     origin.x = newCenter.x - (size.width / 2)
     origin.y = newCenter.y - (size.height / 2)
   }
   }
}
var square = Rect(origin: Point(x: 0.0, y:0.0),
  size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at(\(square.origin.x), \(square.origin.y))")
// 輸出"square.origin is now at (10.0, 10.0)」

 

 

只讀計算屬性變量

只有 getter 沒有 setter 的計算屬性就是隻讀計算屬性。只讀計算屬性老是返回一個值,能夠經過點運算符訪問,但不能設置新的值。let

注意:new

必須使用var關鍵字定義計算屬性,包括只讀計算屬性,由於他們的值不是固定的。let關鍵字只用來聲明常量屬性,表示初始化後再也沒法修改的值。運算符

只讀計算屬性的聲明能夠去掉get關鍵字和花括號:結構體

struct Cuboid {
   var width = 0.0, height = 0.0, depth = 0.0
   var volume: Double {
   return width * height * depth
    }
}
let fourByFiveByTwo = Cuboid(width: 4.0,height: 5.0, depth: 2.0)
println("the volume of fourByFiveByTwois \(fourByFiveByTwo.volume)")
// 輸出 "the volumeof fourByFiveByTwo is 40.0"
相關文章
相關標籤/搜索