美文网首页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

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

    相关文章

      网友评论

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

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

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