原创文章,欢迎转载。转载请注明:关东升的博客

计算属性本身不存储数据,而是从其他存储属性中计算得到数据。

计算属性概念:

计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值。计算属性的语法格式如下:

面向对象类型 类型名 {
存储属性
......
var 计算属性名: 属性数据类型 {
get {
return 计算后属性值
} set (新属性值) {
......
}
}
}

定义计算属性比较麻烦,要注意后面的几个大括号的对齐关系。

我们先看一个示例:

import Foundation
class Employee {
var no: Int =
var firstName: String = "Tony" //存储属性
var lastName: String = "Guan" //存储属性
var job: String?
var salary: Double =
lazy var dept: Department = Department()
var fullName: String { //计算属性
get {
return firstName + "." + lastName //返回拼接的结果
}
set (newFullName) { //存储传递进来的参数值
var name = newFullName.componentsSeparatedByString(".")
firstName = name[]
lastName = name[]
}
}
}
struct Department {
let no: Int =
var name: String = ""
}
var emp = Employee()
print(emp.fullName) //取出属性值
emp.fullName = "Tom.Guan" //给属性赋值
print(emp.fullName)

只读计算属性:

计算属性可以只有getter访问器,没有setter访问器,这就是只读计算属性。指定计算属性不仅不用写setter访问器,而且get{}代码也可以省略。与上一节相比,代码将大大减少。修改上一节示例为只读计算属性,代码如下:

class Employee {
var no: Int =
var firstName: String = "Tony"
var lastName: String = "Guan"
var job: String?
var salary: Double =
lazy var dept: Department = Department() var fullName: String { //简洁的setter访问器

}

struct Department {

let no: Int = 0

var name: String = ""

}

var emp = Employee()

print(emp.fullName)

只读计算属性不能够赋值,下列语句是错误的。

emp.fullName = "Tom.Guan"

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                          ​
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

最新文章

  1. Android中关于dip和px以及转换的总结
  2. 1.SQL语句入门
  3. mysql远程连接:ERROR 1130 (HY000): Host '*.*.*.*' is not allowed to connect to this MySQL server解决办法
  4. iOS开发 使用RMStore简化内购代码 + 内购买订单验证
  5. codeforces 624B Making a String
  6. java做成windows服务,电子秤例子,开机自动启动
  7. MacOS下Rails+Nginx+SSL环境的搭建(下)
  8. 在django admin中添加自定义视图
  9. Python 通过脚本获取Android的apk的部分属性,再通过加密算法生成秘钥。
  10. VS code 配置C++编译环境
  11. Matlab 输入特殊字符
  12. 7.C# 多态的实现
  13. 移动端效果之ScrollList
  14. IDEA安全编码组件
  15. 邮件服务端口 port 25、109、110、143、465、995、993
  16. Apache模块开发
  17. I2C笔记
  18. sdut 面向对象程序设计上机练习十(运算符重载)
  19. 安装fcitx
  20. C#/Java 程序员转GO/golang程序员笔记大全(day 01)

热门文章

  1. 爪哇国新游记之二十九----访问URL获取输入流
  2. 如何注册ocx文件
  3. QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年
  4. IOS Appstore价格表
  5. Crontab命令--Linux
  6. PHP怎么实现站点保存快捷方式
  7. ubuntu cp(copy) command
  8. Spring Boot整合shiro-登录认证和权限管理
  9. 用brew安装gcc48
  10. Python内置函数之input()