swift类与结构体

263 阅读1分钟

类与结构体对比

二者相同点
  • 定义属性
  • 定义方法
  • 可以扩展
  • 遵循协议
不同点
  • 类可以继承,允许一个类继承于另一个类
  • 类是引用类型,结构体是值类型

类与结构体的类型定义

结构体 通常通过关键字 struct来定义 类 通过class来定义

struct LGStudent {
//定义结构体类型
}
class LGTeacher {
//定义class类
}

创建实例

var s= LGStudent() // 创建一个实例为s的结构体
var t= LGTeacher() // 创建一个实例为t的类对象

为什么类是引用类型 结构体是值类型?

同时创建结构体和类对象实例 并添加相应属性

struct LGStudent {
//定义结构体类型
    var name: String?
    var age: Int?
}
class LGTeacher {
//定义class类
    var name: String?
    var age: Int?
}
//对结构体进行分析
var s = LGStudent()
s.name="学生1"
s.age=18
var s1 = s
s1.name="学生2"
s1.age=19
//对类进行分析
var t = LGTeacher()
t.name = "老师1"
t.age = 18
var t1 = t
t1.name="老师2"
t1.age=19

输出结果如下

image.png

通过结果可以总结:

  • 结构体对象s与s1 是相互独立的两个对象,虽然将s赋值给了s1 ,但是s1是完全拷贝了一份新的对象,二者不相互影响 所以说结构体是值类型
  • 类对象t和t1 修改t1对象的属性值,t对象的属性值也相应随之改变,所以不难看出,t是将自己所指向的内存地址赋值给了t1,只要t1改了该地址所在内存的值,t对象相应的属性也随之改变,因为t和t1都指向同一片内存地址。所以说类是引用类型,引用了同一片内存地址