Swifty Firebase API @ Ka-ching —第3部分
更新,2018年10月14日:
自撰写本文以来,这些博客文章中描述的概念已被分为两个开源框架,可以在这里找到:
ka-ching-as / FireSwift-Database
Firebase实时数据库的扩展,可以使用“ Codable” Swift类型。 …
github.com
ka-ching-as / RxFireSwift-Database
Firebase实时数据库的RxSwift扩展– ka-ching-as / RxFireSwift-Database
github.com
这篇文章是3(或4或5?)部分系列的延续。
在第一篇文章中,我们向Firebase API添加了Codable支持:
在第二篇文章中,我们使用Phantom Types添加了Type Safe路径,这为我们提供了强类型的路径和出色的API人体工程学:
在本文中,我们将添加对RxSwift的支持。 如果您想了解有关RxSwift的更多信息,请参考官方github回购,其中提供了很好的用例示例。
我在这里要表达的唯一的进一步动机是,Firebase实时数据库和Rx的思维方式存在巨大的重叠:RTDB允许用户订阅随时间变化的数据。 Rx的主要目的之一就是提供随数据随时间变化建模的原语。
如我所见,Rx是使用Firebase RTDB API的理想方式。 例如,使用本机API观察Firebase中某个位置的更改,要求用户跟踪订阅时返回的订阅令牌。 在Rx中,我们可以将此令牌包装在订阅中,以便在处理订阅时删除Firebase观察器。
但是,当我们开始编码时,所有这些可能更容易掌握!
添加一个Rx扩展
为了方便起见,让我们开始向DatabaseQuery
添加Rx扩展(这是DatabaseQuery
的超类型)。 可以在RxSwift存储库中找到添加Rx扩展的模式,例如RxCocoa扩展。 它看起来如下: