豆荚评论👏:PromiseKit

今天,我们以一个受欢迎的PromiseKit开始了该系列。 它的Github存储库在撰写本文时(撰写本文时)仅超过10,000个星,而其首个发布时间是2014年初。可以说,它有其支持者。

它承诺( ha-ha )简化异步编程。 本文将介绍更常见的用法,并评估诸如文档,易用性及其对项目的影响之类的因素,然后对PromiseKit是否实现其目标以及是否应考虑将其纳入目标做出最终判断。您的下一个应用。

常见问题:回调地狱

上面的示例仅显示了几层嵌套。 现在想象一下,如果之后我们想做更多的异步操作,那就是灾难的秘诀。

PromiseKit解决方案。

下面是未重构的版本。

我们返回promise,而不是在函数中使用转义的闭包。 承诺将满足要求的结果,或者抛出错误,错误将被单独捕获。 Promise中的seal负责处理成功和失败案例。 您可以在图章上称呼fulfillrejectresolve

首先,您可能会想:“好吧,这看起来像很多代码,而且看起来很复杂。” PromiseKit确实具有学习曲线,但是一旦习惯了使用它,就会发现上面的示例可以重构为如下所示:

上面使用first关键字和then函数(均由PromiseKit提供)来允许轻松链接Promises。 这里不再需要seal ,我们可以清理一些多余的嵌套。

或者,您甚至可以进一步将其重构为:

您可以看到,与闭包噩梦相比,代码的可读性得到了极大的提高。

上面的示例仅介绍了PromiseKit的功能,但是使用它几个月后,您会发现它可以清理代码,减少调试时间并使解决方案更具适应性。

在PromiseKit中,很多事情在后台进行,因此您可以免费获得一些东西:
•函数链接:不再嵌套,逃脱回调地狱,并保证对您的内心满足!
•错误传播:以有组织的方式处理所有错误。 如果没有,PromiseKit会警告您。
•泛型:使用泛型和编译器推断的功能,可以减少代码并清晰地编写复杂的任务。
•线程:您可以控制promise执行和完成的线程。
•内存管理:PromiseKit本身可以处理大量内存,因此减少了捕获弱自我的需求。

为什么不使用PromiseKit?

PromiseKit确实有一些警告,但:

承诺只能被执行一次,因此它们不能像逃脱闭包那样“活跃”。 如果您想使用PromiseKit,最好将其集成到整个项目中。 如果您已经很好地进入应用程序的开发阶段,或者您正在使用其他数据绑定库,则PromiseKit可能不适合您。

它还需要一些现有的Swift知识; 如果您是绝对的初学者,除了继续使用泛型的基础知识之前,我建议您先查看Swift处理异步的标准方式,然后再转到PromiseKit等Pod。

该文档是详尽的示例。 Pod会定期进行更新,其中包括详细的迁移指南。 PromiseKit可与Objective C和Swift一起使用。 您可以在此处找到存储库。

判决:Gamechanger

如果您的应用程序具有大量异步逻辑,并且您没有用于处理结果和错误的有组织的统一解决方案,或者您只是厌倦了编写转义的闭包,那么我强烈建议您使用PromiseKit。