iOS项目开发MVVM架构实践(第二篇:NetworkAPI的封装)

实际的项目,我们所请求的API返回的JSON数据都是一个统一的格式,我们就定为如下的格式来现实我们NetworkAPI:

 { 

"res_code": 1, // 状态码

 "res_info": "", //提示消息

 "result": { } // result: 1、任何数据类型、2、对象类型、3、对象数组类型

}  

我们所用的Alamofire可以处理任何数据类型,而AlamofireObjectMapper的responseObject和responseArray方法可以直接把result数据转化为Model或Model数组,但是它们不能满足我们需要,所以我们要在它们的基本上进一步做处理来现实我们的需求,我们针对result返回的三种数据类型定义如下的网络请求方法:

1)、任何数据类型的网络接口的定义

1

2)、对象类型的网络接口的定义

2

3)、对象数组类型的网络接口的定义

3

从上面的方法我们可以看到NetworkError,这个就是我们对res_code、res_info数据处理的实现,NetworkError具体如下:

OpCode
NetworkError

接下来,我们要现实的是上面定义的三个方法,我们结合api返回的数据,对它们做一个统一的处理,具体如下:

Next

其中,用到resMapper是NetworkAPI的一个属性,如下:

 fileprivate var resMapper =ResponseMapper()

struct ResponseMapper {

    var resultKey:String="result"

    var opCodeKey:String="res_code"

    var resInfoKey:String="res_info"

}

而,value(keypath:)是一个方法,如下:

    fileprivate func value(_keyPath: String?) ->String{

        guard let val = keyPath, !val.isEmpty else{

            return self.resMapper.resultKey

        }

        return self.resMapper.resultKey + ".\(val)"

    }

然后,我们再来实现上面的三个方法,如下:

1
2
3

从上面来看,我们并没有看到与reactivecocoa的相关影子呢?

没错,它们只是我们后续要实现的准备工作,我们要在它们的基础上进一步实现三个具备RAC(ReactiveCocoa)特性的方法,如下:

RAC

RAC的实现,才是我们后续真正要用的网络请求方法,尽请期待!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容