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

计算属性概念:

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

  1. 面向对象类型 类型名 {
  2. 存储属性
  3. ......
  4. var 计算属性名: 属性数据类型 {
  5. get {
  6. return 计算后属性值
  7. }
  8. set (新属性值) {
  9. ......
  10. }
  11. }
  12. }

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

我们先看一个示例:

  1. import Foundation
  2. class Employee {
  3. var no: Int = 0
  4. var firstName: String = "Tony"    //存储属性
  5. var lastName: String = "Guan" //存储属性
  6. var job: String?
  7. var salary: Double = 0
  8. lazy var dept: Department = Department()
  9. var fullName: String {    //计算属性
  10. get {
  11. return firstName + "." + lastName      //返回拼接的结果
  12. }
  13. set (newFullName) {   //存储传递进来的参数值
  14. var name = newFullName.componentsSeparatedByString(".")
  15. firstName = name[0]
  16. lastName = name[1]
  17. }
  18. }
  19. }
  20. struct Department {
  21. let no: Int = 0
  22. var name: String = ""
  23. }
  24. var emp = Employee()
  25. print(emp.fullName)      //取出属性值
  26. emp.fullName = "Tom.Guan"    //给属性赋值
  27. print(emp.fullName)

只读计算属性:

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

  1. class Employee {
  2. var no: Int = 0
  3. var firstName: String = "Tony"
  4. var lastName: String = "Guan"
  5. var job: String?
  6. var salary: Double = 0
  7. lazy var dept: Department = Department()
  8. var fullName: String {    //简洁的setter访问器
  9. return firstName + "." + lastName
  10. }
  11. }
  12. struct Department {
  13. let no: Int = 0
  14. var name: String = ""
  15. }
  16. var emp = Employee()
  17. print(emp.fullName)

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

emp.fullName = "Tom.Guan"

Swift—计算属性-备的更多相关文章

  1. Swift计算属性

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

  2. Swift—静态属性- 备

    我先来设计一个类:有一个Account(银行账户)类,假设它有3个属性:amount(账户金额).interestRate(利率)和owner(账户名). 在这3个属性中,amount和owner会因 ...

  3. Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  4. Swift - 类的计算属性(使用get和set来间接获取/改变其他属性的值)

    1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Calc ...

  5. Swift编程语言学习9—— 存储属性和计算属性

    属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...

  6. swift学习笔记之--类的计算属性

    1,Swift中类可以使用计算属性,即使用get和set来间接获取/改变其他属性的值,代码如下 class Calcuator{ ; ; var sum:Int{ get{ return a + b ...

  7. Swift面向对象基础(中)——Swift中的存储属性和计算属性

    学习来自<极客学院> 1.存储属性:存储在类.结构体里的变量或者常量 2.分为:实例存储属性.类型存储属性 3.所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定 4.可选类型 ...

  8. Swift中对计算属性的理解和对之前的补充

    这个功能的重点作用应该是在计算上. 对于一般的属性,要么直接存一个,要么直接读一个,计算属性则可以根据所设置内容,进行一些修改或计算之类的, 比如: import UIKit class sample ...

  9. 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法

    原创文章,欢迎转载.转载请注明:关东升的博客 可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性.添加计算属性的定义,与普通的计算属性的定义是一样的. 实例计算属性示例:在网络编程时,为了减 ...

随机推荐

  1. [LeetCode 116 117] - 填充每一个节点的指向右边邻居的指针I & II (Populating Next Right Pointers in Each Node I & II)

    问题 给出如下结构的二叉树: struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } ...

  2. <item.../>元素可指定如下常用属性

    android:id:为菜单项指定一个唯一表实.android:title:指定菜单项的标题.android:icon:指定菜单项的图标.android:alphabeticShortcut:为菜单项 ...

  3. Android中设置文字大小的定义类型

    在Android中所有的组件可以设置大小,但是在设置大小的时候需要指定其单位,这些单位如下: px(pixels):像素: dip(device independent pixels):依赖于设备的像 ...

  4. Linux下配置QT环境

    一.下载Qt源码包到本机,然后解压缩 #tar zxvf qt-x11-opensource-src-4.3.2.tar.gz -C /usr/local //将qt-x11-opensource-s ...

  5. openstack debugs

  6. javaweb笔记2之HTTP协议

    1 什么是http协议 是浏览器客户端  和  服务器端 数据传输的 格式规范: 2 查看http协议 (1)用火狐的firebug插件查看      (2)使用谷歌的Ghome查看(审查元素-> ...

  7. i&1、负数二进制

    if(i&1==1) 表示 如果是 奇数 则...i&1 -- 按位与运算,取 2进制整数 i 的最低位,如果最低位是1 则得1,如果最低位是0 则得0. 奇数 i 的最低位 是1,偶 ...

  8. CentOS启动MySQL服务失败

    :: mysqld_safe Starting mysqld daemon with databases from /data/mysql :: [Warning] Can't create test ...

  9. SSO跨域解决方案

    单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可 以将 ...

  10. openwrt上网配置的一些理解(四)

    这次要解决的问题是3g上网和wan口上往可以随意切换,当然能够叠加也是好事,不过这不是我关心的.下面还是修改3个文件network,firewall,multiwan.首先在network中加入界面配 ...