Swift 计算属性

原创
2016/09/12 10:44
阅读数 81

计算属性

除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值。

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 的计算属性就是只读计算属性。只读计算属性总是返回一个值,可以通过点运算符访问,但不能设置新的值。

注意:

必须使用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"
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部