Swift学习笔记-类

参考书籍:
[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 函数名(参数:数据类型,...,参数:数据类型){
 ...
 }
}

调用形式:

类名.方法名(参数,参数)

注意:

  1. 类型方法中不可以使用存储属性
  2. 必须用类去调用,而非对象,否则会出现错误
  3. 不要忘记外部参数名

3、存储属性、局部变量、全局变量区别

[table id=1 /]

4、self属性

解决方法中局部变量可能和存储属性同名的问题。

四、下标脚本

下标脚本是访问对象、集合或者序列的快捷方式。不需要调用实例特定的赋值和访问方法就直接访问所需要的数值。

1、定义

通过subscript关键字定义,语法形式:

subscript(参数:数据类型,...,参数:数据类型)->返回值数据类型{
 get{
 //返回与参数类型匹配的类型的值
 }
 set(参数){
 //执行赋值操作
 }
}

2、调用

调用形式:

实例对象[参数,...,参数]

3、使用下标

只为刷语法,以后用时再细看

五、类的嵌套

1、直接嵌套

一个类或多个类可直接嵌套在另外一个类中

2、多次嵌套

允许多次嵌套

六、可选链接

可选链接可以判断请求或调用的目标是否为空。若为空,则调用成功;相反,返回空。