美文网首页iOS-SwiftSwiftswift-only 八条精选
swift集合协议我帮你小结好了

swift集合协议我帮你小结好了

作者: 八条8tiao | 来源:发表于2016-07-27 10:47 被阅读433次

swift标准库中为我们提供了三种类型的集合。八条8tiao 现在写一份非官方文档,把这些协议的作用以及之间的关系总结出来。方便大家将来深入学习集合的时候做参考。我们现在看一下Array、Dictionary、Set三种集合的定义形式(非完整定义)。

// Array的定义
public struct Array<Element> : CollectionType, MutableCollectionType {}
extension Array : _ArrayType {}
public protocol _ArrayType : RangeReplaceableCollectionType, MutableSliceable, ArrayLiteralConvertible {}

// Dictionary的定义
public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible {}

// Set的定义
public struct Set<Element : Hashable> : Hashable, CollectionType, ArrayLiteralConvertible {}

// CollectionType的定义
public protocol CollectionType : Indexable, SequenceType {}

当前的整理是基于swift2.2,在swift3当中对协议做了调整,例如用MutableCollectionType协议替代了MutableSliceable协议,在下面我们会提到。

如果你现在还不了解genernator,sequence。可以看另外一篇内容了解Generators VS Sequences VS Collections

一、二、三、四、五上山打老虎,我们现在就开始扒一扒这些协议的作用。
所有的集合都一定准守 CollectionType 协议(否则就不是集合类型啦),而CollectionType继承了
SequenceType协议,所以,我们从这从它开始吧。

SequenceType协议

我们经常在集合类型对象上面使用的map()、filter()等方法它们其实就是来自于SequenceType协议
只要我们准守了SequenceType协议,我们可以默认获得下面这些方法,而且是协议提供的默认实现,不需要我们自己动手哦,是不是相当划算?

  • contains
  • enumerat
  • filter
  • join
  • lazy
  • map
  • maxElement
  • minElement
  • reduce
  • sorted
  • startsWith
  • underestimateCount
  • zip

CollectionType / MutableCollectionType

MutableCollectionType协议和CollectionType协议的区别在于,MutableCollectionType协议的下标方法中提供了set方法,so,mutable!!!!!如果我们实现CollectionType协议,那我们需要提供两个属性 startIndex 和 endIndex,并且提供一个下标方法 subscript()用来返回数组下标对应的元素。实现一个CollectionType协议的好处也是多多滴,我们可以获得如下方法。

  • count
  • find
  • first
  • indices
  • isEmpty
  • last
  • partition
  • reverse
  • sort

这些方法都太熟悉了吧,其实它们就是属于CollectionType协议的,而且协议也我们提供了默认实现!!!

MutableSliceable

我们经常需要在数组上面截取一部分数据(dropLast方法就意味着截取不包括最后一个元素的片段),截取后获得的是slice类型的对象,slice类型的对象和原数组共享indices属性,并且共享同一段内存空间,就像视图的性质那样,但一旦发生数据变化,那么双方就会分别获得自己独立的存储空间。

虽然swift3将会把MutableSliceable协议去掉,但它的所提供的能力并没有去掉,而是使用MutableCollectionType进行了替代。如果我们实现了MutableSliceable协议,我们会获得一下方法。

  • dropFirst
  • dropLast
  • prefix
  • split
  • suffix

RangeReplaceableCollectionType

我们使用数组的时候,总是需要对数组进行管理操作的吧,比方说增、删、改数组的内部元素。定义这些任务就是RangeReplaceableCollectionType协议存在的价值,如果我们准守了RangeReplaceableCollectionType协议,那么我们将会获得以下管理数组的方法。

  • extend
  • insert
  • removeAll
  • removeLast
  • removeRange
  • splice

内容中的方法都没有提供说明,一个是考虑官方文档中有详细说明,另外一个考虑都是常用的方法。本文主要是给集合的最基本协议和方法进行归类总结。

相关文章

  • swift集合协议我帮你小结好了

    swift标准库中为我们提供了三种类型的集合。八条8tiao 现在写一份非官方文档,把这些协议的作用以及之间的关系...

  • Swift语言总结

    Swift学习总结 协议 协议是方法的集合,它可以把看似不想关的对象的公共行为放到一个协议中。协议在Swift开发...

  • Swift集合类型协议

    在前一章中,我们看到了 Array,Dictionary 和 Set,它们并非空中楼阁,而是建立在一系列由 Swi...

  • Swift 进阶 - 集合协议

    Swift 中集合协议是数组、字典、集合和字符串实现的基础,有一些数据结构和算法的知识,理解这部分内容更容易一些。...

  • # Swift 集合类型之迭代器

    我们知道在 Swift 中 Sequence 是 集合类型结构 中的基础。而在 Sequence 协议的定义当中我...

  • Swift 协议 protocol 小结

    在Swift 2发布时,苹果将Swift定义为一门面向协议编程的语言,协议在Swift中被赋予了更加强大、灵活的功...

  • Swift 4新功能 ------ 二(Whatʼs new

    Swift 4 新功能 -(二) 协议相关类型的约束 字典(Dictionary)和集合(Set)的增强 Muta...

  • Swift——第三周的爬坑之路

    协议 1.定义:协议是方法的集合,可以把看似不相关的对象的公共行为放到一个协议中。2.协议自身的意义:Swift中...

  • Swift 协议的集合类型

    因为协议可以作为类型使用,可以把遵守相同协议的实例放到一个协议类型的数组中 例如 在以往定义一个数组 解决的一种办...

  • Swift 语言初探3

    协议 协议是方法的集合(计算属性相当于方法)把对象的公共行为抽象的放在一个协议中协议在Swift开发中大致有3种作...

网友评论

  • 八条8tiao:哈哈,谢谢,我写的这些不受欢迎的,当做学习总结吧。
  • 乔_帮主:挺好的

本文标题:swift集合协议我帮你小结好了

本文链接:https://www.haomeiwen.com/subject/tvjojttx.html