在Swift中使用泛型的13个理由
我决定使用电视节目“ 为什么要使用13种理由 ”撰写一篇有关仿制药的文章,以说明我们如何使用它们,希望您会喜欢!
提醒
Swift中的泛型是为项目编写“泛型”代码的一种方式:是的,但是还有什么呢? 这些通用类型可以用项目中可用的任何其他类型替换,也可以由Swift标准库提供。 它们通常用于创建结构,类或函数。
如果需要,泛型可以受协议约束 ,从而可以更精确地了解泛型。
您已经遇到的最常见的通用类型是Optional 。 您可以使用任何类型并将其设置为Optional,它将起作用。 这是因为Optional使用通用类型(在其定义中声明为Wrapped ),该通用类型允许您在其中放入任何内容。
而且,它可以有选择地帮助您编写更少 , 干净和可重用的代码! 让我们看看如何说明它们的用法。
语境
自由高中的新来学生汉娜·贝克尔 ( Hanna Becker)在未知的情况下自杀身亡。 她的朋友克莱·詹森 ( Clay Jensen)想知道她死亡的所有真相。
在她去世之前,她记录了13个原因 她用录音带传送给她的朋友托尼帕迪拉(Tony Padilla) 。 我们将尝试帮助克莱聆听录音带,并使用基本的Swift泛型原理最终认识他的朋友汉娜的真相。
- 不用担心,本文没有任何破坏 !
帮助克莱·詹森
汉娜去世前,克莱曾 在他去学校的路上听音乐。 他拥有一个音乐播放器 ,该音乐播放器可以从CD和USB等多种支持中读取内容。
不幸的是,他的音乐播放器坏了。 由于我们是好人,我们将帮助他让它再次发挥作用。
我们将定义一个枚举AudioType ,它将包含不同类型的可能的支持。 我们还定义了一个名为AudioContent的协议,该协议将保存不同音频支持的属性 :
最后,真相
托尼刚把录音带交给了克莱:
Tape类再次符合AudioContent协议,并且还具有title属性。
不幸的是,克莱无法用他的音乐播放器来读取磁带。
每个磁带都有不同的类型,是唯一的,并且由不同的属性组成:
这些自定义磁带是从Tape类继承的 ,因此它们也符合AudioContent协议。
请注意,它们可能还具有一些属性和方法。
克莱决定窃取能够读取任何磁带的托尼帕迪拉的磁带播放器 。 我们将帮助他实现目标。
我们将继承现有的MusicPlayer类 创建一个称为TapePlayer的新泛型类:
这次,我们说“ T”类型参数必须符合Tape type 。
众所周知, currentAudio是类型Tape ,因此我们确定可以将磁带插入currentAudio属性。
现在,我们可以访问磁带的` title`属性,以及在TapePlayer类中插入的当前磁带的任何其他属性。 TapePlayer类还具有一个record()方法。
现在,我们更精确地了解属性currentAudio ,因为我们知道其类型为Tape。 另一方面,我们仍然有一个通用类,因为我们可以读取任何类型的磁带 :
恭喜你! 我们只是帮助克莱听有关汉娜的录音带!
… 下一步是什么 ?
使用Swift泛型的13个理由
- 最干净的代码
- 安全代码
- 可重用代码
- 更少的代码
- 优雅的代码
- 抽象代码
- 消除类型转换(类型推断)
- 更容易阅读
- 输入安全
- 一堂课统治所有人
- 执行更好的操作并存储集合类型
- 对类型之前的行为进行思考
- 通过使用泛型,您可以帮助Clay与自己和睦相处😉