前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >I Promise U 实践

I Promise U 实践

作者头像
大话swift
发布2019-07-04 11:19:15
4860
发布2019-07-04 11:19:15
举报
文章被收录于专栏:大话swift大话swift

上一篇我们基本解除到了Promise的概念,也了解了PromiseKit中的几个基常用的概念,这次我们就来个小实践:

开讲前先安利一波慢慢的更新了这么久终于达到门槛了,感谢大家的支持啊

最近呢浏览到一个壁纸网站,那是各种美图,但是呢?有不想每天总是刷然后在设置为电脑壁纸吧。

怎么办???

作为IT人员可定是从技术角度来处理这个事情----爬虫是首选。但是呢?没听说过swift有爬虫框架,好在啊咱们收集到一个xpath框--一个基于C封装的swift框架……是不是绝配啊

话不多说我们先看看战果,当然啦这只是其中一部分

这本书很推荐大家看看,尤其是IT技术宅

我们首先看一个实践过程中使用的一个另类的方式:

var urls = ["4kfengjing","4kmeinv","4kyouxi","4kdongman","4kyingshi","4kmingxing","4kqiche","4kdongwu","4krenwu","4kmeishi","4kzongjiao","4kbeijing","shoujibizhi"].map({ (item:String) -> String in

return [K4, item].joined(separator: "/")

}).makeIterator()

let generator = AnyIterator<Promise<Void>>.init { () -> Promise<Void>? in

guard let url = urls.next() else {

return nil

}

return firstly{

after(seconds: 10)

}.then({ _ in

return self.fetch(page: url)

})

}

when(fulfilled: generator, concurrently: 2)

.ensure {

print("完成结束")

}.catch { (e:Error) in

print(e)

}

以往使用这个多请求完成之后再往下走的方式我们很多采用 GCD的group来完成,或者采用barrier的方式来完成,但是GCD的回调方式让人在多层嵌套中不胜其扰,但是Promise的链式函数式操作让我们看到了新的姿势

我们来预览一下效果

是不是感觉过程清晰可见,是不是像打游戏一样,下一关 下一关……的爽利感觉

我们再开看看图片的保存

按照之前的block方式我们想要请求图片,然后保存,最终返回本地存储地址是需要一层层的block嵌套回调,但是有了promise之后我们不需要啦。只需要这样

1 发送网络请求

2 then 拿到图片数据

3 then 保存图片

4 then 文件路径传递到下一操作

5 done 结束

func save( img:String, to saveKind:SaveKind = SaveKind.thubnail)->Promise<String>{

return Alamofire.request(img)

.responseData().then({ (imgData:(data: Data, response: PMKAlamofireDataResponse)) -> Promise<String> in

return Promise{ seal in

do{

let path = [saveKind.filePath , imgData.response.request!.url!.pathComponents.last!].joined(separator: "/")

try imgData.data.write(to: URL.init(fileURLWithPath:path ))

seal.fulfill(path)

}catch{

seal.reject(error)

}

}

})

}

大致就这些,下一期我们安利xpath的知识点以及采用swift进行HTML的数据爬取

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档