Swift计算属性
2016-10-11 09:58
183 查看
除存储属性外,类、结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值。
这个例子定义了 3 个几何形状的结构体:
例子中接下来创建了一个名为
<<<<<<< HEAD
注意:
注意:
必须使用
a516af6a531a104ec88da0d236ecf389a5ec72af
只读计算属性的声明可以去掉
这个例子定义了一个名为
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)”
这个例子定义了 3 个几何形状的结构体:
Point封装了一个
(x, y)的坐标
Size封装了一个
width和
height
Rect表示一个有原点和尺寸的矩形
Rect也提供了一个名为
center的计算属性。一个矩形的中心点可以从原点和尺寸来算出,所以不需要将它以显式声明的
Point来保存。
Rect的计算属性
center提供了自定义的 getter 和 setter 来获取和设置矩形的中心点,就像它有一个存储属性一样。
例子中接下来创建了一个名为
square的
Rect实例,初始值原点是
(0, 0),宽度高度都是
10。如图所示蓝色正方形。
square的
center属性可以通过点运算符(
square.center)来访问,这会调用 getter 来获取属性的值。跟直接返回已经存在的值不同,getter 实际上通过计算然后返回一个新的
Point来表示
square的中心点。如代码所示,它正确返回了中心点
(5, 5)。
center属性之后被设置了一个新的值
(15, 15),表示向右上方移动正方形到如图所示橙色正方形的位置。设置属性
center的值会调用 setter 来修改属性
origin的
x和
y的值,从而实现移动正方形到新的位置。
便捷 setter 声明
如果计算属性的 setter 没有定义表示新值的参数名,则可以使用默认名称newValue。下面是使用了便捷 setter 声明的
Rect结构体代码:
struct AlternativeRect { 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 { origin.x = newValue.x - (size.width / 2) origin.y = newValue.y - (size.height / 2) } } }
只读计算属性
只有 getter 没有 setter 的计算属性就是只读计算属性。只读计算属性总是返回一个值,可以通过点运算符访问,但不能设置新的值。<<<<<<< HEAD
注意:
必须使用var
关键字定义计算属性,包括只读计算属性,因为他们的值不是固定的。let
关键字只用来声明常量属性,表示初始化后再也无法修改的值。
注意:必须使用
var关键字定义计算属性,包括只读计算属性,因为它们的值不是固定的。
let关键字只用来声明常量属性,表示初始化后再也无法修改的值。
a516af6a531a104ec88da0d236ecf389a5ec72af
只读计算属性的声明可以去掉
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 fourByFiveByTwo is \(fourByFiveByTwo.volume)") // 输出 "the volume of fourByFiveByTwo is 40.0"
这个例子定义了一个名为
Cuboid的结构体,表示三维空间的立方体,包含
width、
height和
depth属性,还有一个名为
volume的只读计算属性用来返回立方体的体积。设置
volume的值毫无意义,因为通过
width、
height和
depth就能算出
volume。然而,
Cuboid提供一个只读计算属性来让外部用户直接获取体积是很有用的。
相关文章推荐
- Swift computed property可计算属性详解
- Swift中的Lazy与计算属性
- Swift::2::计算属性
- Swift 计算属性
- swift学习笔记之--类的计算属性
- swift 学习笔记(23)-属性(计算属性)
- swift中的计算属性
- Swift中的Lazy与计算属性
- Swift面向对象基础(中)——Swift中的存储属性和计算属性
- swift 关键字guard 计算属性
- Swift计算属性
- swift学习笔记--计算属性和存储属性的区别
- swift_044(Swift 计算属性和存储属性的概念以及使用)
- Swift2.x 中类的计算属性set方法不能访问自身值
- Swift—计算属性-备
- Swift 系统学习 24 类相关 存储属性 计算属性 类型属性 延迟加载属性
- Swift计算属性
- Swift 中的计算属性、懒存储属性、属性观察器
- 【Swift】Swift基础之储存属性与计算属性(一)
- swift自学笔记(四)(懒加载、存储属性、计算属性、类属性、属性监听)