Swift-将枚举用作工厂
不飞溅是关于照片的全部。 您可以搜索照片,查看新照片,查看集合中的照片,查看摄影师的照片,查看用户喜欢的照片…
来自不同来源的照片列表都是一样的。 在iOS应用中,我使用了辉煌的Swift enum
作为工厂来生成请求和数据源。
等一下,是一英镑。
网络要求
以下是从API检索照片的一些方法:
- 新照片
- 搜索
- 收藏的照片
- 用户的照片
- 用户的喜欢的照片
所有这些端点都返回带有分页的照片列表。 为了处理分页,我遵循了CloudKit中使用的游标概念。 对CloudKit进行分页查询时,它将返回CKQueryOperation.Cursor
对象,可用于初始化下一页的查询。 这是一个不透明的对象,我不知道它拥有什么属性,但是我喜欢这个概念。
这是我在iOS应用中创建的游标类型:
parameters
属性会传递一些特定于端点的参数,例如排序顺序,集合ID,搜索查询…
游标与以下PagedRequest
协议一起使用:
每个分页的API端点都有一个对应的Request
对象,该对象遵循PagedRequest
协议,因此这些对象使用游标初始化,并可以为下一页生成游标。 它们还具有生成其初始光标的类函数。 例如,这是搜索的对象:
数据来源
显示照片的视图控制器使用DataSource
对象,该对象利用了这些分页的请求。 使用支持以下协议的工厂对象初始化数据源:
DataSource
使用该工厂对象来获取请求对象,并执行它们以从API中检索照片。 它不知道照片是否来自搜索,收藏,用户喜欢……
该工厂
这是the的东西。
该应用程序将enum
用作支持RequestFactory
协议的工厂。 看起来像这样:
可是等等! 还有更多! 枚举还生成DataSource
对象。
回顾一下,工厂产生了三件事:
- 分页的初始光标
- 要求
- 数据源
最后,懒惰
该应用程序使用单个PhotosViewController
来显示照片,无论它们来自什么API终结点。
以下是创建显示搜索照片的视图控制器的方法: