Swift中的泛型

1、typealias和泛型接口
2、泛型扩展

1、typealias和泛型接口
  • typealias是用来为已经存在的类型重新定义名字的,通过命名,可以使代码变得更加清晰。
  • typealias是单一的,也就是说你必须指定将某个特定的类型通过typealias赋值为新名字,而不能将整个泛型类型进行重命名。下面这样的命名都是无法通过编译的:
class Person<T> {}
typealias Worker = Person
typealias Worker = Person<T>
typealias Worker<T> = Person<T>
  • 一旦泛型类型的确定性得到保证后,我们就可以重命名了“
class Person<T> {}
typealias WorkId = String
typealias Worker = Person<WorkId>
  • Swift中没有泛型接口的,但是使用typealias,我们可以在接口里定义一个必须实现的别名,这在一定范围内也算一种折中方案。
protocol GeneratorType {
  typealias Element
  mutating func next() --> Self.Element?
}

protocol SequenceType {
  typealias Generator: GeneratorType
  func generate() —> Self.Generator
}

在实现这些接口时,我们不仅需要实现指定的方法,还要实现对应的typealias,这其实是一种对于接口适用范围的抽象和约束。

2、泛型扩展
  • Swift对于泛型的支持使得我们可以避免为类似的功能多次书写重复的代码,这是一种很好的简化。
  • 在泛型类型的extension中可以直接使用之前定义的泛型的名称,在extension的方法中可以定义新的泛型名称。
  • 简单说就是我们不能通过扩展来重新定义当前已有的泛型符号,但是可以对其进行使用;在扩展中也不能为这个类型添加泛型符号;但只要名字不冲突,我们是可以再新声明的方法中定义和使用新的泛型符号的。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift泛型介绍 泛型是为Swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可...
    Bobby0322阅读 14,292评论 0 26
  • 什么时候需要使用泛型 在讲到泛型之前,先写一段代码(文中的代码都是Swift书写)。 这是一个很常见的也很简单的I...
    BennyLoo阅读 3,116评论 1 4
  • 本文源自于泊学文档,同时在下方添加了扩展的案例,为了方便团队成员翻阅,记录之。 面向对象的方式 在面向对象的世界里...
    AKyS佐毅阅读 928评论 0 3
  • 作者:Thomas Hanning,原文链接,原文日期:2015/09/09译者:pmst;校对:numbbbbb...
    梁杰_numbbbbb阅读 487评论 0 4
  • 时隔1个月,2个月,3个月。。。我终于回来了。。公司项目太忙了以至于简书一直没有更新。而且公司项目还是OC的。。最...
    MelodyZhy阅读 1,586评论 1 5

友情链接更多精彩内容