类和结构体的共同点:
- 定义属性用于存储值
- 定义方法用于提供功能
- 定义附属脚本用于访问值
- 通过拓展增加默认实现的功能
- 定义构造器用于生成初始化值
- 实现协议以提供某种标准功能
- 类是引用类型 结构体是值类型
类相对于结构体多出的附加功能:
- 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 解构器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用
类的定义:
class CustomClass { // 声明一个类 一般命名都是大写开头 如:String Array // 可以在这里声明属性和方法 var name: String? let orderCount = 100 let isBasic = true }
结构体的定义:
struct CustomStruct { // 声明一个结构体 命名方式与类一样 // 可以在这里声明属性和方法 var width = 100.0 var height = 50.0 }
实例化:
类和结构体的实例化方法很相似,以下代码分别生成结构体和类的实例,调用的都是默认构造器
let someClass = CustomClass() var someStruct = CustomStruct()
与类不同的是结构体默认拥有逐一构造器,可以方便的设置属性的值
var secondStruct = CustomStruct( 50.0, height: 91.0)
属性操作:
类和结构体都可以使用.(点语法)进行属性的操作
someClass.name = "order1" print("print someClass name (someClass.name)") // 打印 print someClass name Optional("order1") <因为name属性是可空类型 所以会打印出 Optional("order1")> someStruct.height = 100.0 print("print someStruct (someStruct.width) and height:(someStruct.height)") // 打印出 print someStruct 100.0 and height:100.0 <因为width在声明CustomStruct的时候就已经给了默认值 所以值为100.0>
恒等运算符:
恒等运算符的作用是比较两个变量是否引用的是同一个实例,因为类是引用类型。然而结构体却不需要,因为结构体在每次赋值或者通过传参的时候都会发生拷贝(值类型特性)。"==="代表等价于 "!=="代表不等价
var secondClass = CustomClass() var thirdClass = someClass if thirdClass !== secondClass { print("引用的不是同一个实例") } if someClass === thirdClass { print("引用的是一个实例") }
这次是对结构体和类的简单认识,之后会记录具体使用的笔记以供备忘