IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Swift 2.0学习笔记(Day 32)——计算属性

    tonny_guan发表于 2015-11-06 10:28:23
    love 0
    原创文章,欢迎转载。转载请注明:关东升的博客  

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

    计算属性概念:

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

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

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

    我们先看一个示例:

    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{}代码也可以省略。与上一节相比,代码将大大减少。修改上一节示例为只读计算属性,代码如下:

    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)
    

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

    emp.fullName = "Tom.Guan"

     

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

     



沪ICP备19023445号-2号
友情链接