Tag: Promisekit

豆荚评论👏:PromiseKit

今天,我们以一个受欢迎的PromiseKit开始了该系列。 它的Github存储库在撰写本文时(撰写本文时)仅超过10,000个星,而其首个发布时间是2014年初。可以说,它有其支持者。 它承诺( ha-ha )简化异步编程。 本文将介绍更常见的用法,并评估诸如文档,易用性及其对项目的影响之类的因素,然后对PromiseKit是否实现其目标以及是否应考虑将其纳入目标做出最终判断。您的下一个应用。 常见问题:回调地狱 上面的示例仅显示了几层嵌套。 现在想象一下,如果之后我们想做更多的异步操作,那就是灾难的秘诀。 PromiseKit解决方案。 下面是未重构的版本。 我们返回promise,而不是在函数中使用转义的闭包。 承诺将满足要求的结果,或者抛出错误,错误将被单独捕获。 Promise中的seal负责处理成功和失败案例。 您可以在图章上称呼fulfill , reject或resolve 。 首先,您可能会想:“好吧,这看起来像很多代码,而且看起来很复杂。” 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。

使用PromiseKit在Swift中承诺

Promise在Java Script中非常强大,可帮助我们处理异步编程过程。 现在我们可以通过PromiseKit在Swift中使用Promise mxcl / PromiseKit PromiseKit – Swift和ObjC的承诺 github.com 例如,我们有一个任务要做,即从后端获取图片网址,然后从该网址下载图片,最后在图片视图上显示图片 所以对于正常的工作,我们会这样做 它只是一个简单的获取URL和下载图像,但我们仅出于一个目的就需要完成三个任务:(1)获取Image Url,等待获取完成,然后下载图像(2)最后在下载时在ImageView中显示该图像过程已经完成。 因此,让我们通过Promise使这项工作更加容易,让我们在此文章顶部的Git Hub链接中安装Promise。 首先,我们创建“获取网址的承诺”并下载图片 现在将这些Promises连接在一起,我们可以将其称为Promise Chain,下一个.then()将以先前的返回值作为参数 好的! 现在更容易。 在过程中,让我们进入显示/隐藏指示器的下一个级别 因此,有一段时间我们遇到了一个问题,我们需要处理多个异步任务,然后等待那些结果继续并且这些结果不是相同的格式。 好吧,这可能会使您的应用程序变慢。 幸运的是,我们在PromiseKit中有“ when()”。 在when()中,添加要同时执行的所有promise,它将等待所有promise解析后再继续。 让我们来看看 PromiseKit可以做很多事情,在我的文章中只关注并发。 Promise提高了可读性,并使控制并发变得更加容易。 有关PromiseKit的更多信息,让我们尝试一下PromiseKit文档:https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md

使用PromiseKit和Alamofire在Swift中下载图像

问题 如果我们必须从远程位置下载一些内容,则网络代码可能会变得非常混乱。 首先,我们必须知道要从中下载内容的路径(URL) (在我们的示例中为图片) 。 其次,可能该位置或路径将写入一些REST API端点请求中,并且在处理了JSON数据响应之后,我们必须开始下载图像,最后必须更新UI。 所有这些都必须在后台线程上完成,因为我们不想阻塞主线程,当然我们希望我们的应用程序保持响应。 此类问题的最佳解决方案是使用异步编程,并且如果我们希望我们的代码看起来非常整洁,则PromiseKit是最佳选择。 如果您不熟悉异步编程,请查看我以前的有关如何使用PromiseKit for Swift的文章。 接下来,我们将使用CocoaPods依赖项管理器安装PromiseKit和Alamofire库以用于网络请求。 要与其他依赖项管理器一起安装库,请访问PromiseKit的官方文档https://github.com/mxcl/PromiseKit和Alamofire https://github.com/Alamofire/Alamofire。 使用CocoaPods安装PromiseKit和Alamofire 如果您尚未安装CocoaPods,那么现在该进行安装了。 转到终端应用程序并输入: $ sudo gem install cocoapods 有关使用CocoaPods依赖性管理器的详细信息,请访问官方网站https://cocoapods.org/。 创建一个新的Xcode项目(Single View Application),并在项目目录中使用命令pod init创建新的podfile。 打开podfile并添加PromiseKit和Alamofire依赖库: 目标’YourProjectTarget’做 使用动态框架 use_frameworks! pod’PromiseKit’ 豆荚“ Alamofire” 结束 保存podfile,此时您可以在终端中使用pod install命令安装库: $ pod安装 从现在开始,您必须打开新创建的工作区文件.xcworkspace而不是.xcodeproj。 就是这样,现在我们可以在项目中使用PromiseKit和Alamofire了。 现实世界的例子 在本教程中,我们将从远程位置下载照片集。 我们假设照片的URL将在某些REST API端点中编写,并且出于本示例的目的,我们将使用占位符API https://jsonplaceholder.typicode.com/photos,该URL具有用于5000张照片的URL。 下载照片可能需要一些时间,因此我们将显示带有activityIndicator组件的预加载动画,并在下载完成后将其隐藏。 我们不会保留照片,它们将存储在临时数组[UIImage] 。 为了显示照片,我使用的是UICollectionView但是您可以自由使用任何可视组件进行显示。 采取的步骤: 显示预加载动画 获取并序列化json响应 下载照片 […]

101:Alamofire和PromiseKit

使用Alamofire执行异步请求时。 您的代码看起来像这样吗? 好吧,那很好,但是可以更好。 怎么样? 承诺! 承诺 Promise简化了异步编程,您可以在其中基于事件编写代码。 这样可以使您的代码更简洁,可读性更好。 它还将帮助您减少特别是在处理异步请求时以很多委托或复杂的完成处理程序结尾的可能性。 在本文中,我将使用PromiseKit这个建议中使用的流行Swift库。 许诺是代表异步任务的对象。 传递该对象,并编写整洁,有序的代码; 从一个异步任务到另一个异步任务的逻辑,简单,模块化的流。 资料来源:http://promisekit.org/docs/ 一个Promise有一个then块,就像一个onSuccess完成处理程序。 它还有一个catch块,将错误处理与您的主代码路径分开,就像onFailure完成处理程序一样。 我们将在开始时使用相同的示例将请求与承诺包装在一起,它看起来像这样: 使用基于PromiseKit版本的代码示例 现在您可以像这样使用它: 如您所见,不需要定义委托或完成处理程序,我们利用PromiseKit的then块和catch块分别处理有效响应和错误。 注意:在最新的PromiseKit版本中, then被分为then , done和map 。 有关更多信息,请查看PromiseKit 6发行说明。 我知道Promise真是太棒了!但是,在您开始采用PromiseKit之前,我强烈建议您慢慢使用它,并在其“入门指南”或他们的网页中阅读有关此库的更多信息。 然后,当您感到舒适时,才开始用promise打包所有异步请求。 愿原力与你同在… (我最近看过《星球大战:最后的绝地武士》,我被炒作了……让我成为吧) 我希望您喜欢这篇文章,并且总体上觉得它很有用。 并且不要犹豫,留下反馈或任何问题。 谢谢!