2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 通过 Moya + RxSwift + Argo 完成网络请求

通过 Moya + RxSwift + Argo 完成网络请求

时间:2022-10-09 17:08:19

相关推荐

通过 Moya + RxSwift + Argo 完成网络请求

作者:@请叫我汪二授权本站转载。

最近在新项目中尝试使用 Moya+RxSwift+Argo 进行网络请求和解析,感觉还阔以,再来给大家安利一波。

Moya

Moya是一个基于Alamofire的更高层网络请求封装,深入学习请参见官方文档:Moya/Docs。

使用Moya之后网络请求一般长了这样:

Moya提供了很多不错的特性,其中我感觉最棒的是stub,配合sampleData分分钟就完成了单元测试:

注意这里的MoyaProvider.ImmediatelyStub,我原以为它是个枚举类型,看了MoyaProvider定义发现这里应该传个closure,看了ImmediatelyStub的定义发现原来它是个类方法:

如果想打印每次请求的参数,在组装endpoint的时候打印即可:

RxSwift

RxSwift前面强行安利过两波,在此不再赘述啦,Moya本身提供了RxSwift扩展,可以无缝衔接RxSwift和ReactiveCocoa,于是打开方式变成了这样:

Moya的核心开发者、同时也是Artsy的成员:Ash Furrow, 在 AltConf 做过一次 《Functional Reactive Awesomeness With Swift》 的分享,推荐大家看一下,很可爱的!

Argo

Argo是thoughtbot开源的函数式JSON解析转换库。说到thoughtbot就不得不提他司关于JSON解析质量很高的一系列文章:

Efficient JSON in Swift with Functional Concepts and Generics

Real World JSON Parsing with Swift

Parsing Embedded JSON and Arrays in Swift

Functional Swift for Dealing with Optional Values

Argo基本上就是沿着这些文章的思路写出来的,相关的库还有Runes和Curry。

使用Argo做JSON解析很有意思,大致长这样:

至于这其中各种符号的缘由,在几篇博客中都有讲解,还是挺有意思滴。

All

说完这三者,如何把它们串起来呢?Emergence中的Observable/Networking给了我们答案。稍微整理后如下:

这样在调用的时候就很舒服了,以前面的Item为例:

一个mapSuccessfulHTTPToObjectArray方法,直接将JSON字符串转换成了Item对象,并且传入了后面的数据流中,所以在onNext订阅的时候传入的就是[Item]数据,并且这个转换过程还是可以复用的,且适用于所有网络请求中JSON和Model的转换。爽就一个字,我只说一次。

爽!

Next

匆匆读了一点Emergence和Eidolon的项目源码,没有深入不过已经受益匪浅。通过 bundle 管理 id 和 key 直接解决了我当初纠结已久的『完整项目开源如何优雅地保留 git 记录且保护项目隐私』的问题,还有Moya/RxSwift和Moya/ReactiveCocoa这种子模块化处理也在共有模块管理这个问题上给了我一些启发。

真是很喜欢 Artsy 这样的团队,大家都一起做着自己喜欢的事情,还能站着把钱赚了。

所幸的是我也可以这样做自己喜欢的事情了,不过不赚钱。具体状况后面单独开一篇闲扯扯。

碎告。

参考资料:

RxSwift

Moya

Argo

Emergence

Eidolon

Efficient JSON in Swift with Functional Concepts and Generics

Real World JSON Parsing with Swift

Parsing Embedded JSON and Arrays in Swift

Functional Swift for Dealing with Optional Values

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。