在我们开发App的时候,经常要和网络请求打交道。也许你不知道NSURLSession,或者你也不知道NSURLConnection,亦或者你不知道NSURLSessionManager,但是在开发中你一定听过AFNetworking这个框架。是的,这个框架是几个大牛对苹果原生网络请求的封装,它里面的内容我今天不在这里做讲解,等哪天专门抽时间来好好的聊聊这个牛逼的AFN框架。今天来聊的是基于这个框架的对网络请求的二次封装。
有的人会问,这个框架本身不是已经进行封装了吗,干嘛还要进行二次封装,有这个闭眼吗?我想说的是,有这个必要。因为我们每次在调用这个框架的时候需要去写很多重复性的代码,这样有两个弊端:第一就是,你的项目中垃圾代码满天飞,第二就是,你调用后台接口的时候不能够保持接口的统一性。我想,做过开发的人都知道封装的好处,这里就不啰嗦了。
我今天处理的是基于这个AFN的二次封装,实现了项目中最常见的post和get请求,以及上传图片到服务器的功能。
下面首先看下我的demo中的层级结构:
首先创建的是一个基于AFHTTSessionManager的SessiomManager的类,在这个类中,有服务器接受的请求的类型,服务器响应的时间戳,以及向服务器请求的类型。下面是代码:
在我们进行网络请求的的时候也需要时时刻刻监听网络的状态,在这里我直接用了一个很好的Reachability类,这是苹果已经写好的了监听网络改变的功能强大的类,直接附上代码:
在这里我用了一个bool值类型的值来判断是否有网络,具体的如果想判断是哪一种网络状态的话也很简单,里面有网络的wifi状态,wlan状态还有所谓的unknow的状态。
接下来创建了一个继承自NSObject的NetWorkCall的类,下面直接看这个类中的方法:
这三个类方法中有些参数的意思已经标明了,在这里我用了SVProgressHUD这个第三方,参数show也是用来判断要不要显示加载的提示信息。当然,也可用MBProgressHUD。
下面是方法的实现的代码:
在上传图片的实现中,为了也出现图片名为空的情况,需要做一个处理为空的处理,上面我已经处理过了。我这里支持多想图片或者单张图片上传到服务器上面。
在这些方法中主要是用到了几个block,这几个block的运用就是起到向后台发送请求后,在接受到服务器请求以后回调后台返回过来的数据。
下面是我借用公司本地开发环境下的一个简单的接口,来测试一下我的一个网络请求。下面是一段代码:
测试结果是好的,在这里,我就不显示服务器返回过来的数据了。上面就是一个简单的思路和代码,如有不足之处,欢迎指正。
我一直相信,没有demo的技术文章就是在耍流氓,下面附上demo地址:https://github.com/15221532825/iOSNetWorkManager
如果觉得有一点帮助,可以到这个链接地址查看详细代码。谢谢!