美文网首页
iOS项目开发MVVM架构实践(第二篇:NetworkAPI的封

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

作者: 看不懂的故事 | 来源:发表于2018-04-29 00:35 被阅读0次

    实际的项目,我们所请求的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的封

          本文链接:https://www.haomeiwen.com/subject/sownlftx.html