Swift · 2024年4月23日 0

Swift类与结构体

类与结构体相同点(🤷🏻)

  • 定义方法、属性、初始化器
  • 定义下标提供对其值的访问
  • 使用扩展 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官方文档