欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Swift中结构体(structures)和类(classes)的选择

程序员文章站 2024-02-20 15:41:52
...

在Swift中结构体和类有很多相似的特性,结构体似乎是swift中一个非常常用的数据类型,而类在oc中是最习惯使用的类型,开发中对类和结构体如何抉择呢?

首选结构体

尽量使用结构体来描述你的数据结构
swift中的结构体有很多其他语言的结构体所不具备的:可以包含储存属性、计算属性、方法;遵循协议;Swift的标准库和Foundation的基本类型大量使用了结构体,如数字、字符串、数组、字典
结构体是值类型,而类是引用类型,结构体对全局的其他作用域是不可见的,除非你特地去实现这个功能。所以你可以更放心的对局部的结构体进行修改而不担心影响到整体代码的逻辑。

使用类获取OC特性

使用类获取OC已经成熟的组件功能,如处理数据的OC API、对特定类层次结构的OC类进行子类化

使用类来区别引用

因为类是引用类型,不同类实例的每个储存属性相同的值时,恒等运算符仍然会视他们为不同。这样的作用是,引用类型对全局共享一个实例的其他作用域是可见的,即内容的修改会影响到其他的引用的内容。
通常在一些文件操作句柄的类、网络连接的管理类、硬件中介类等使用类的类型比较合适。

使用结构体作为一个值

当不需要判断两个值是否是同一个引用时,首选结构体类型。如网络请求中,我们无需关心服务端实际数据的准确性,只需要把响应体中的数据作为实体类来解释即可,如:

struct PenPalRecord {
    let myID: Int
    var myNickname: String
    var recommendedPenPalID: Int
}

var myRecord = try JSONDecoder().decode(PenPalRecord.self, from: jsonResponse)

使用结构体时可以用protocol来模拟继承和共享的行为

结构体不能直接继承类来获得类的行为,但是结构体可以用遵循协议的方式间接实现继承的功能。对于新的需求,建议使用协议对继承行为进行定义,因为协议protocol可以被类、结构体、枚举同时使用。