参考书籍:
[1]管蕾.张玲玲.朱元波.Swift开发实战[M]. 北京:人民邮电出版社.2014.10-1 ISBN 978-7-115-36827-0
[2]陈隽.刘媛媛.Swift入门很简单[M]. 北京:清华大学出版社.2015.01-01 ISBN 978-7-302-38880-7
一、类与对象
二、属性
1、存储属性
1.1定义存储属性
1.2访问存储属性
1.3延迟存储属性
第一次调用存储属性时才能确定初始值,需要使用延迟存储属性实现(数据类型可以略去,初始值不可以略去)。定义使用关键字lazy实现,语法形式如:
lazy var 属性名:数据类型=初始内容
实例如下:
import Foundation class DataImporter{ var fileName = 123456 } class DataManage{ lazy var importer = DataImporter()//不可为let 关键字 var data=[String]() } let manager=DataManage() manager.data += ["Some more data"] print(manager.data) print(manager.importer.fileName)
2计算属性
计算属性不存储值,而是提供一个getter和setter来分别获取值和设置值。
getter使用get关键字定义,一般形式如:
get{ ... return 属性值 }
setter使用set关键字定义,如:
set(参数名称) { ... 属性值=某值 ... }
当然也可以没有参数,计算属性可同时包括getter和setter,如:
var 属性名:数据类型{ get { } set() { } }
例如:
import Foundation class WalletClass{ var money = 0.0 var cal:Double{//一定需要指定明确的数据类型,double不可以省略 get{ var RMB = money * 6.1 //只能使用var 关键字 return RMB } set ( RMB ){//如果set未定义参数名,可以使用默认名称newValue(如果定义参数,则不可以使用默认名称) money = RMB/6.1//set参数类型需和返回值类型相同 } } } var mywallet = WalletClass() mywallet.cal = (20) print(mywallet.cal) print(mywallet.money)
终端:
20.0
3.27868852459016
Program ended with exit code: 0
注意:计算属性中如果只有一个getter,则称为只读计算属性。在只读计算属性中可以讲get关键字和花括号去掉。
3、类型属性
即不需要对类实例化就可以使用的属性。需要使用关键字class定义,语法形式:
class var 类型属性名:数据类型{//不可使用let ...//不可使用存储属性 返回一个值 } 访问形式: 类名.类型属性//只能用类访问,不能使用对象访问
4、属性监视器
监控和响应属性值变化、当属性值被设置时,会调用属性监视器(机器新旧值相同,也会响应)。语法形式:
var 属性名:数据类型=初始值{ willSet(参数名){//设置新值前被调用,传入新属性值(默认参数名newValue) ... } didSet(参数名){//设置新值后被调用,传入旧属性值(默认参数名oldValue) ... } } //注意: //延迟属性不能使用属性监视器 //willSet 和didSet可分开使用
三、方法
1、实例方法
定义在类中,有类的实例调用。定义形式:
func 函数名(参数:数据类型,...,参数:数据类型)->返回值类型{ ... }
2、类型方法
类的某一个实例调用的方法。定义形式:
class 类名{ class func 函数名(参数:数据类型,...,参数:数据类型){ ... } }
调用形式:
类名.方法名(参数,参数)
注意:
- 类型方法中不可以使用存储属性
- 必须用类去调用,而非对象,否则会出现错误
- 不要忘记外部参数名
3、存储属性、局部变量、全局变量区别
[table id=1 /]
4、self属性
解决方法中局部变量可能和存储属性同名的问题。
四、下标脚本
下标脚本是访问对象、集合或者序列的快捷方式。不需要调用实例特定的赋值和访问方法就直接访问所需要的数值。
1、定义
通过subscript关键字定义,语法形式:
subscript(参数:数据类型,...,参数:数据类型)->返回值数据类型{ get{ //返回与参数类型匹配的类型的值 } set(参数){ //执行赋值操作 } }
2、调用
调用形式:
实例对象[参数,...,参数]
3、使用下标
只为刷语法,以后用时再细看
五、类的嵌套
1、直接嵌套
一个类或多个类可直接嵌套在另外一个类中
2、多次嵌套
允许多次嵌套
六、可选链接
可选链接可以判断请求或调用的目标是否为空。若为空,则调用成功;相反,返回空。