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的实现,才是我们后续真正要用的网络请求方法,尽请期待!

你可能感兴趣的:(iOS项目开发MVVM架构实践(第二篇:NetworkAPI的封装))