Swift 数组底层探究

数组的协议结构

  • Sequence 序列
  • Collection 集合
  • RangeReplaceableCollection 可以做区间替换的集合
  • Array 数组
Sequence
Collection
RangeReplaceableCollection
Array

Sequence

  • 一个序列(sequence)代表的是一系列具有相同类型的值,你可以对这些之进行迭代。
    Swift 数组底层探究

IteratorProtocol

  • Sequence 通过一个迭代器来提供对元素的访问。迭代器每次产生一个序列的值。
  • 并且当便利序列时对遍历状态进行管理。
  • 当序列被耗尽时,next() 应该返回 nil。

定义自己的 Sequence

Swift 数组底层探究
Swift 数组底层探究

Collection

  • 一个Collection是满足下面条件的 Sequence
    • 稳定的 Sequence,能够被多次遍历并且保持一致
    • 除了线性遍历意外,集合的元素也可以通过下边索引的方式被获取到
    • 和 Sequence不同,Collection类型不能是无限的。
      Swift 数组底层探究

Array的迭代器

Swift 数组底层探究

Array的下标访问

Swift 数组底层探究

Array的buffer

Swift 数组底层探究

_ContiguousArrayBuffer

Swift 数组底层探究

_ContiguousArrayBuffer的getElement

Swift 数组底层探究

UnsafeMutablePointer的下标操作

Swift 数组底层探究

问题:endIndex 和 count

苹果官方推荐以O(1)返回endIndex,endIndex不一定为 count类型
Swift 数组底层探究