iOS-SwiftSwiftswift-only 八条精选

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

2016-07-27  本文已影响433人  八条8tiao

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

CollectionType / MutableCollectionType

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

  • count

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

MutableSliceable

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

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

  • dropFirst

RangeReplaceableCollectionType

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

  • extend

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

上一篇下一篇

猜你喜欢

热点阅读