《从零开始学Swift》学习笔记(Day 32)——计算属性

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

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

计算属性概念:

计算属性提供了一个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_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

 


http://www.niftyadmin.cn/n/1036449.html

相关文章

二叉树的概念以及搜索二叉树【建议收藏】

hello, everyone. Long time no see. 本期文章,我们主要讲解一下二叉树的相关概念,顺便也把搜索二叉树(也叫二叉排序树)讲一下。我们直接进入正题吧!GitHub源码链接 文章目录一、二叉树的概念二、搜索二叉树一、二叉树…

平衡二叉树(AVL树),原来如此!!!【爆肝力作 建议收藏】

文章目录一、认识平衡二叉树二、插入操作三、删除操作一、认识平衡二叉树 前几天,我们将搜索二叉树(也称为二叉排序树)讲解了,重点讲了搜索二叉树的插入和删除操作,由特别是删除操作,是比较难的知识点。现…

浅析红黑树!【建议收藏】

前些天,我们讲解了搜索二叉树和AVL树,也知道了AVL树的自平衡机制,是如何进行旋转的,也知道了对于AVL树来说,查找数值的时间复杂度在O(logN)内,也就是说整棵树的深度,就是最大的查找次数。但是在…

什么是并查集?【建议收藏】

文章目录一文彻底搞懂《并查集》!概念实现初始化并查集判断是不是同一个组查找当前节点的代表节点合并操作本期文章源码: GitHub一文彻底搞懂《并查集》! 概念 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问…

你真的分清楚子序列和全排列了吗?【建议收藏】

子序列与全排列的区别? 可能大家听到这两个名词,似乎感觉有点相似,分不清楚,什么是子序列,什么是全排列。本期文章就来给大家捋清楚这两个是什么。Let’s go. 三道题: 打印一个字符串的全部子序列&#…

初识Java语言(五)- 包和继承

前面,我们讲了Java中的一些基本的特征,与其他语言也有很多的相似之处。本期文章,我们来看一看在Java中包的概念和继承的概念。大家坐好,我们发车了!!! 前期文章: 前言- IDEA如何配置…

《从零开始学Swift》学习笔记(Day 33)——属性观察者

原创文章,欢迎转载。转载请注明:关东升的博客为了监听属性的变化,Swift提供了属性观察者。属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到。属性观察者主要有以下两个:willSet&…

彻底理解KMP算法!【爆肝力作 建议收藏】

大家好,前面的有一篇文章讲了子序列和全排列问题,今天我们再来看一个比较有难度的问题。那就是大名鼎鼎的KMP算法。 本期文章源码:GitHub源码 文章目录简介暴力解法(BF)KMP算法简介 KMP算法是一种改进的字符串匹配算法…