第五章——结构体与类(序)

本文探讨了Swift中结构体(struct)与类(class)的区别,包括它们作为值类型与引用类型的特性,不可变性的实现方式,内存管理的区别,以及继承的支持情况等。文章通过实例解释了如何选择最适合的数据类型。

感谢DJagger提供翻译

在Swift中,我们可以有三种不同的方式储存结构化的数据:结构体(struct)、枚举(enum)和类(class)。(我们会在本章后续部分提到第四种方式。)在Swift标准库中,我们可以观察到90%的公有类型都以结构体的形式定义,而枚举和类各占5%。这些标准库类型的性质占了一部分原因,但是我们的确能从中看出Swift中结构体的重要性。在本章我们会着重介绍结构体和类的不同——而枚举与结构体类似。

以下是一些结构体与类关键的不同之处:

  • 结构体和枚举都是值类型,而类是引用类型。在设计结构体时,我们可以利用编辑器强制保证结构体的不可变性(immutability);而在设计类时,我们需要自己控制这一点。
  • 管理内存方式不同。结构体可以被直接储存或读取,而类会间接通过引用来进行。结构体不能被引用而是被拷贝
  • 结构体和枚举没有继承的概念。相比之下,没被标记为final的类都可以被继承。如果想要复用代码,我们需要其他技术,如组合、范型和协议扩展。

本章会探究这些不同之处的细节。我们从实体和值的不同入手。其次就是关于可变性的问题,以及letvar关键字在结构体和类上不同效果。接下来我会展示如何在结构体中使用引用类型,就像使用值类型一样使用它。然后我们会对比内存工作方式的不同,尤其是引用类型的内存管理。根据这些细节,我们可以研究如何使用引用类型和值类型解决相同的问题。最后我们再来讨论继承的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值