今天博客我接着上篇博客的内容来,上篇博客我们详细的看了ReactiveSwift中的Observer已经Event的代码实现。接下来我们来看一下ReactiveSwift中的结构体Bag的实现。Bag:袋子,顾明思议,就是用来装东西的,我们暂且将Bag称之为容器。在ReactiveSwift中的Bag主要是用来存储Signal对象的,我们在后期介绍ReactiveSwift源码时会陆陆续续的看到Bag的身影。
因为Bag这个结构体在ReactiveSwift中比较独立,所以我们本篇博客就来聊一下Bag的具体实现。本篇博客我们会详细的介绍Bag的代码实现,并从Bag代码实现中看一下Swift语言本身的东西,并给出Bag的测试用例。当然,本篇博客我们还会涉及到“迭代器模式”,关于“迭代器模式”更详细的信息,请移步于之前发布的关于设计模式的博客《设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)》。
一、ContiguousArray
在博客的第一部分我们先来看一下ContiguousArray的相关内容。因为结构体Bag就是在ContiguousArray的基础上进行封装的,也就是说袋子中的元素最终是存放在ContiguousArray中的。在Swift中ContiguousArray与Array的用法差不多,下方是官方对ContiguousArray的介绍。
从下方我们可以清楚的知道ContiguousArray、Array还有ArraySlice的大部分属性和方法是共用的。但是在存储Class或者@objc 协议时,使用ContiguousArray效率会更高一些。但是ContiguousArray不能和Objective-C的NSArray进行桥接,并且不能将ContiguousArray传入到Objective-C的API中。
延伸阅读
学习是年轻人改变自己的最好方式