原创文章,欢迎转载。转载请注明:关东升的博客php
计算属性自己不存储数据,而是从其余存储属性中计算获得数据。java
计算属性概念:微信
计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其余属性或变量的值。计算属性的语法格式以下:网站
面向对象类型 类型名 { 存储属性 ...... var 计算属性名: 属性数据类型 { get { return 计算后属性值 } set (新属性值) { ...... } } }
定义计算属性比较麻烦,要注意后面的几个大括号的对齐关系。spa
咱们先看一个示例:.net
import Foundation class Employee { var no: Int = 0 var firstName: String = "Tony" //存储属性 var lastName: String = "Guan" //存储属性 var job: String? var salary: Double = 0 lazy var dept: Department = Department() var fullName: String { //计算属性 get { return firstName + "." + lastName //返回拼接的结果 } set (newFullName) { //存储传递进来的参数值 var name = newFullName.componentsSeparatedByString(".") firstName = name[0] lastName = name[1] } } } struct Department { let no: Int = 0 var name: String = "" } var emp = Employee() print(emp.fullName) //取出属性值 emp.fullName = "Tom.Guan" //给属性赋值 print(emp.fullName)
只读计算属性:设计
计算属性能够只有getter访问器,没有setter访问器,这就是只读计算属性。指定计算属性不只不用写setter访问器,并且get{}代码也能够省略。与上一节相比,代码将大大减小。修改上一节示例为只读计算属性,代码以下:code
class Employee { var no: Int = 0 var firstName: String = "Tony" var lastName: String = "Guan" var job: String? var salary: Double = 0 lazy var dept: Department = Department() var fullName: String { //简洁的setter访问器 return firstName + "." + lastName } } struct Department { let no: Int = 0 var name: String = "" } var emp = Employee() print(emp.fullName)
只读计算属性不可以赋值,下列语句是错误的。component
emp.fullName = "Tom.Guan" 对象
欢迎关注关东升新浪微博@tony_ 关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php