![ad5de117fd4dec74268ca5797dfea5b2.png](https://i-blog.csdnimg.cn/blog_migrate/9e154e8574b3742919d2b883ac0a9469.jpeg)
译自 a free Hacking with Swift tutorial
更多内容,欢迎关注公众号 「Swift花园」
喜欢文章?不如来个 ➕三连?关注专栏,关注我
结构体 vs 类
Swift 里有两样东西对你来说一定不陌生:结构体和类。它们都是可以让我们构建拥有属性和方法的复杂数据类型的方法,但它们的工作方式,尤其是两者间的差异,是一个 (Swift 语言设计中) 很要紧的存在。
如果你还记得的话,结构体和类之间有五个关键的差异:
- 类没有逐一成员构造函数;结构体默认获得逐一构造成函数。
- 类可以使用继承来构建功能;结构不能。
- 如果你复制一个类,两份拷贝都会指向相同的数据;但结构体的拷贝,其数据是各自独立的。
- 类可以有析构函数;结构体没有。
- 你可以在常量类实例里改变变量属性的值;但常量结构体实例里的属性是固定的,不管它是常量还是变量。
在 Apple 原来的编程语言 Objective-C 中,我们几乎为所有的事物使用类 —— 因为没的选,几乎所有东西都基于类来运作。
Swift 中情况不一样,我们拥有选择权,选择应该基于上面提到的那些差异中的因素。之所以说”应该“,是因为即便你看到有人不关心两者的差异,总是只用 class
或者 struct
, 也并不稀奇。
选择结构体或者类取决于你和你要解决的问题。不过我希望你思考它们是如何传递你的意图的。 Donald Knuth 说过,“程序是给人读的,偶尔给计算机运行”,这句话正合我意:当别人阅读你的代码时,你的意图是否能清晰地传达给他们?
如果你大部分时候用的是结构体,然后在一个特定的地方换成了类,这就传达了一个意图: 这个东西不一样,需要不同的用法。但如果你总是使用类,这种区别就消失了 —— 毕竟,不太可能你在大多数情况下都得使用类。
提示: SwiftUI 有一个迷人的细节是它扭转了我们使用结构体和类的方式。在 UIKit 中我们针对数据使用结构体,针对 UI 使用类,但在 SwiftUI 中完全相反 —— 这给我们提了醒,学习很重要ÿ