在Swift中使用泛型的13个理由

我决定使用电视节目“ 为什么要使用13种理由 ”撰写一篇有关仿制药的文章,以说明我们如何使用它们,希望您会喜欢!

提醒

Swift中的泛型是为项目编写“泛型”代码的一种方式:是的,但是还有什么呢? 这些通用类型可以用项目中可用的任何其他类型替换,也可以由Swift标准库提供。 它们通常用于创建结构,类或函数。

如果需要,泛型可以受协议约束 ,从而可以更精确地了解泛型。

您已经遇到的最常见的通用类型是Optional 。 您可以使用任何类型并将其设置为Optional,它将起作用。 这是因为Optional使用通用类型(在其定义中声明为Wrapped ),该通用类型允许您在其中放入任何内容。

而且,它可以有选择地帮助您编写更少干净可重用的代码! 让我们看看如何说明它们的用法。

语境

自由高中的新来学生汉娜·贝克尔Hanna Becker)在未知的情况下自杀身亡。 她的朋友克莱·詹森Clay Jensen)想知道她死亡的所有真相。

在她去世之前,她记录了13个原因 她用录音带传送给她的朋友托尼帕迪拉(Tony Padilla) 。 我们将尝试帮助克莱聆听录音带,并使用基本的Swift泛型原理最终认识他的朋友汉娜的真相。

  • 不用担心,本文没有任何破坏

帮助克莱·詹森

汉娜去世前,克莱曾 在他去学校的路上听音乐。 他拥有一个音乐播放器 ,该音乐播放器可以从CDUSB等多种支持中读取内容

不幸的是,他的音乐播放器坏了。 由于我们是好人,我们将帮助他让它再次发挥作用。

我们将定义一个枚举AudioType ,它将包含不同类型的可能的支持。 我们还定义了一个名为AudioContent的协议,该协议将保存不同音频支持的属性

最后,真相

托尼刚把录音带交给了克莱:

Tape类再次符合AudioContent协议,并且还具有title属性。

不幸的是,克莱无法用他的音乐播放器来读取磁带。

每个磁带都有不同的类型,是唯一的,并且由不同的属性组成:

这些自定义磁带是从Tape继承的 ,因此它们也符合AudioContent协议。

请注意,它们可能还具有一些属性和方法。

克莱决定窃取能够读取任何磁带的托尼帕迪拉的磁带播放器 。 我们将帮助他实现目标。

我们将继承现有的MusicPlayer 创建一个称为TapePlayer的新泛型类:

这次,我们说“ T”类型参数必须符合Tape type

众所周知, currentAudio是类型Tape ,因此我们确定可以将磁带插入currentAudio属性。

现在,我们可以访问磁带的` title`属性,以及在TapePlayer类中插入的当前磁带的任何其他属性。 TapePlayer类还具有一个record()方法。

现在,我们更精确地了解属性currentAudio ,因为我们知道其类型为Tape。 另一方面,我们仍然有一个通用类,因为我们可以读取任何类型的磁带

恭喜你! 我们只是帮助克莱听有关汉娜的录音带!

… 下一步是什么 ?

使用Swift泛型的13个理由

  1. 最干净的代码
  2. 安全代码
  3. 可重用代码
  4. 更少的代码
  5. 优雅的代码
  6. 抽象代码
  7. 消除类型转换(类型推断)
  8. 更容易阅读
  9. 输入安全
  10. 一堂课统治所有人
  11. 执行更好的操作并存储集合类型
  12. 对类型之前的行为进行思考
  13. 通过使用泛型,您可以帮助Clay与自己和睦相处😉

感谢您的阅读,如果喜欢,请随时鼓掌并分享。 💪