Swift系列9-结构体和类

类和结构体是一种多功能且灵活的构造体,是代码构建的基础.

结构体

结构体:使用struct关键字
值类型:
值类型是一种当他被指定到(常量或变量,或被传递给函数)时会被拷贝的类型;
结构体是值类型.
枚举,整型,浮点型,字符串,字符,布尔值,字典,数组都是值类型,他们都是以结构体的形式在后台实现的;

结构体一些功能

定义属性存储值
定义方法提供功能
允许使用下标语法来访问值
定义初始化器用于初始化状态
可以使用扩展来添加默认没有的功能
遵循协议来针对特定类型提供标准的功能

结构体实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//定义一般的结构体
struct myStruct {
var height:CGFloat
var width:CGFloat
}
//默认值结构体
struct man {
let gender = "man"
let other:Int = 100

func name() {
print("name")
}

}
//调用
let s1:myStruct = myStruct.init(height: 100.0, width: 100.0)
print(s1.width,s1.height)

let m = man() //实例1
let m1:man = man.init() //实例2
print(m1.gender,m1.other) //通过点语法来访问结构体的属性
m1.name()

使用class关键字
引用类型:
当他被指定到常量或变量,或被传递给函数时不会被拷贝,而是引用他的现存实例;
类是引用类型

类的一般功能

定义属性存储值
定义方法提供功能
允许使用下标语法来访问值
定义初始化器用于初始化状态
可以使用扩展来添加默认没有的功能
遵循协议来针对特定类型提供标准的功能

可以继承另外一个类的特征
类型转换允许你在运行检查和解释一个类实例的类型
反初始化器允许一个类实例释放任何被其所分配的资源
引用计数允许不止一个对类实例的引用

类的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
//类
class BaseViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()

}
}
//实例化类
let ba = BaseViewController()
print(ba.arrSource.count)

let ba1 = BaseViewController()
print(ba1.arrSource.count)

特征运算符

因为类是引用类型,在后台有可能有很多常量和变量都是引用到了同一个类的实例.(相同这词对结构体和枚举来说并不是真的相同,因为它们在赋予给常量,变量或者被传递给一个函数时总是被拷贝过去的.)
有时候找出两个常量或者变量是否引用自同一个类实例非常有用
相同于 ( ===)
不相同于( !==)
利用这两个恒等运算符来检查两个常量或者变量是否引用相同的实例

1
2
3
4
5
6
7
8
9
let ba = BaseViewController()
print(ba.arrSource.count)

let ba1 = BaseViewController()
print(ba1.arrSource.count)

if ba === ba1 {
print("他们是相同对象的实例")
}

类和结构体的选择

当是单纯的需要保存数据,并且属性不超过五个时,应该选择结构体而非类.
其他时候,如有属性和方法时,需要使用到继承,选择类.

The End