通过RxSwift和ObjectMapper缓解Firebase的痛苦

本文是我在软件工程中的一些实用方法。

所有示例代码均使用Swift 3,Firebase 4.0,RxSwift 3.6.1和ObjectMapper 2.2.8编写

介绍

也许您知道,Firebase是跨平台开发工具的集合,包括实时数据库,分析,云消息传递,身份验证,Admob等。 但它最初是一个实时数据库,在2014年被Google收购之前。

背景

Firebase实时数据库(为了简短起见,从现在开始,我将说Firebase for Firebase实时数据库 )可能不适用于每个移动应用程序,但是在我们正在开发的iOS游戏项目中,它可以满足我们的需求,而且速度非常快。 这是一个普通Firebase对象的示例:

您可能希望它以平面以下的格式轻松地将它们映射到对象中。 我将为此提供一些解决方案。

  { 
“ postId”:“ postId”,
“ title”:“标题”,
“ content”:“内容”,
“ author”:“ userId”
}

对象映射器

我经常使用ObjectMapper自动将JSON映射到Model对象。 有很多库,但是我很熟悉。 我将介绍JSON映射的两种基本情况

  1. 单对象映射

解决这个问题的第一种方法是每次查询Post对象时,将Firebase的DataSnapshot键手动添加到数据字典中

likes是一个包含userId列表的数组,但是我不想将其存储为[ String: Bool] 。 最好编写一个自定义转换。

邮政模型变为:

此外,您可以编写所需的任何自定义转换,例如在Int64时间戳和String日期格式之间进行转换。

RxSwift

  1. 什么是RxSwift?

Rx代表ReactiveX,是“用于异步编程的API
带有可观察到的流”(http://reactivex.io)。 另外,有许多教程告诉您应该了解Rx的优点。 例如,Why-Rx,Why-Use-RxSwift。

RxSwift是Swift语言中Rx的实现,其中包括其他语言:Java,JS,C#,Python…

2.为什么选择Rx?

Rx优雅地处理异步代码块。 它具有陡峭的学习曲线,但值得学习。 对我来说,带有RxSwift的Firebase非常强大。

3.行动中

首先,我用RxSwift封装了Firebase函数,该函数可以帮助您以一种更易读的反应方式查询Firebase。 我将展示其中的两个。 这些功能将成为令人印象深刻的新事物的坚实基础。

如您所见,我向流传播了错误(我们中许多人可能忘记或太懒了,现在通过订阅那些Error事件,我们可以更轻松地处理错误)。 还要感谢Disposable,由观察返回的手柄将在可观察对象的生命周期结束时自动移除(我们很多人可能会忘记这样做)。

通过结合这些内容,现在我可以用更清晰的代码来处理我们的逻辑/计算了。

此外,您还可以利用RxSwift的许多运算符,例如timeoutfilterdelay …,使用subscribeOnobserveOn多线程处理,或者将其与其他流结合使用concatmergezip等等。

结论

在一篇文章中,很难解释所有内容,但是我想总结一下在编程中遇到的一些问题以及如何克服这些问题。

如果您正在阅读此行,谢谢您的关注。