#Swift
Swift,作为一个面向对象语言,也是有 class
关键字的。
但是不同于Java,C# 等语言,它的 class
似乎并不是很常用(?
而在SwiftUI中,class
的功能似乎被 struct
取代——行使和 class
相似的功能,但是我还是时常不清楚二者的区别。所以在此总结一下😋。
——部分解答参考了Google Gemini给出的回答,如有错误,请务必及时指出!欧内盖!
Swift 中的 struct
和 class
都是用来定义自定义数据类型的,它们之间有许多相似之处,但也有一些关键的区别。
值类型与引用类型
最大的区别在于 struct 是值类型,而 class 是引用类型。这意味着:
- 值类型:将一个值类型变量赋值给另一个变量时,会将该值的副本赋值给另一个变量。因此,对其中一个变量的更改不会影响另一个变量。
- 引用类型:将一个引用类型变量赋值给另一个变量时,只会将该变量对对象的引用赋值给另一个变量。因此,对其中一个变量的更改会影响另一个变量。
示例
1 | struct Point { |
在这个例子中,Point
就是一个值类型。因此,将 a
赋值给 b
时,会将 a
的值复制给 b
。在这之后,如果对 b.x
做更改, a.x
的值不会受到影响。
1 | class Person { |
在这个例子中,Person
是一个引用类型。因此,将 c
赋值给 d
时,只会将 c
对对象的引用赋值给 d
。在这之后,如果对 d.age
的值做出更改,c.age
的值也会受到影响。
其他区别
- 继承:class 可以继承自另一个 class,而 struct 不能。
- 初始化:struct 有默认的成员初始化器,而 class 没有。
- 可变性:struct 实例默认是不可变的,而 class 实例是可变的。
- 类型转换:class 实例可以进行类型转换,而 struct 实例不能。
选择使用 struct 还是 class
一般来说,如果不需要继承或类型转换,并且希望使用值语义,则应使用 struct。如果需要继承或类型转换,或者需要可变实例,则应使用 class。
以下是一些使用 struct 和 class 的示例:
- 使用 struct 表示简单的数据值,例如点、大小或颜色。
- 使用 struct 表示不可变的数据,例如日期或时间。
- 使用 class 表示复杂的数据结构,例如用户或文档。
- 使用 class 表示需要继承的数据结构,例如视图控制器或网络请求。