类与结构体相同点(🤷🏻)
- 定义方法、属性、初始化器
- 定义下标提供对其值的访问
- 使用扩展 extension
- 遵循协议提供标准功能
两者区别
结构体是值类型(Value Type),类是引用类型(Reference Type)
上代码
struct RGB {
var red = 0.0
var green = 0.0
var blue = 0.0
}
let color = RGB()
var newColor = color
newColor.red = 250.0
print("color rgb red value:\(color.red)")
print("newColor rgb red value:\(newColor.red)")
输出结果:
color rgb red value:0.0
newColor rgb red value:250.0
对于结构体而言,存储在color中的值被赋值给了新的实例newColor上,两个独立的实例包含相同的数值,由于是两个独立的实例,所以当newColor修改red 值的时候,不会对color造成影响。
对于类
class Person {
var name:String?
var age = 0
}
let person = Person()
person.name = "Terry"
person.age = 20
let anotherPerson = person
anotherPerson.age = 18
print("person age :\(person.age)")
print("anotherPerson age :\(anotherPerson.age)")
输出结果:
person age :18
anotherPerson age :18
Person类为引用类型,person的age和anotherPerson的age指向同一个对象,anotherPerson的age修改了,person的age也随之更改。
结构体的优点
- 适用于复制操作
- 更快更安全,无需担心内存泄漏、多线程冲突
类具有结构体不具备的功能
- 类有继承特性,子类可以使用父类的特性和方法,而结构体没有继承特性
- 类型转换:在runtime检查和解释实例类型
- 可以通过deinit释放任何已分配的资源
- 类的实例可以被多次引用
以上就是类和结构体的异同
参考 Swift官方文档
网友评论