iOS项目相关@AFN&SDWeb的二次封装

一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装

1.

HttpClient.h及.m

.h定义了HTTP常用的四种GET POST PUT DELETE 请求

一般分别用做增删减查

定义前预处理,请求成功处理,请求失败处理的block

及带多参数w的方法声明

.m设置请求类型跟响应类型,监听网络是否有网络,如果没有,弹出网络异常的警示框

2.

UIImageView+WebCache.h及.m

这是类别的方法,把网络请求图片封装起来

.h 定义加载成功,加载失败及加载进度的block

下载未成功时预设图片的加载方法及网络请求下载图片的方法声明

.m

是两个方法的具体实现

 1 #import <Foundation/Foundation.h>
 2 #import "AFNetworking.h"
 3
 4 //HTTP请求类别
 5 typedef NS_ENUM(NSInteger,HttpRequestType) {
 6     HttpRequestGet,
 7     HttpRequestPost,
 8     HttpRequestPut,
 9     HttpRequestDelete,
10 };
11
12
13 /**
14  *  请求前预处理block
15  */
16 typedef void(^PrepareExecuteBlock)(void);
17
18 typedef void(^SuccessBlock)(NSURLSessionDataTask * task, id responseObject);
19
20 typedef void(^FailureBlock)(NSURLSessionDataTask * task, NSError * error);
21
22 @interface HttpClient : NSObject
23
24 + (HttpClient *)defaultClient;
25
26 /**
27  *  HTTP请求(GET,POST,PUT,DELETE)
28  *
29  *  @param url     请求地址
30  *  @param method  请求类型
31  *  @param params  请求参数
32  *  @param prepare 请求前预处理
33  *  @param success 请求成功处理
34  *  @param failure 请求失败处理
35  */
36
37 - (void)requestWithPath:(NSString *)url
38                  method:(NSInteger)method
39             paramenters:(NSDictionary *)params
40          prepareExecute:(PrepareExecuteBlock)prepare
41                 success:(SuccessBlock)success
42                 failure:(FailureBlock)failure;
43
44
45 @end
  1 #import "HttpClient.h"
  2
  3 @interface HttpClient ()
  4
  5 @property (nonatomic, strong) AFHTTPSessionManager * manager;
  6
  7 @property (nonatomic, assign) BOOL isConnect;
  8
  9 @end
 10
 11 @implementation HttpClient
 12
 13 - (instancetype)init
 14 {
 15     self = [super init];
 16     if (self) {
 17
 18         self.manager = [AFHTTPSessionManager manager];
 19         //设置请求类型
 20         self.manager.requestSerializer = [AFHTTPRequestSerializer serializer];
 21         //设置响应类型
 22         self.manager.responseSerializer = [AFJSONResponseSerializer serializer];
 23
 24         self.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", @"text/json", @"text/javascript",@"text/plain",@"image/gif", nil];
 25
 26         //开启监听
 27         [self openNetMonitoring];
 28
 29     }
 30     return self;
 31 }
 32
 33 - (void)openNetMonitoring {
 34
 35     [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
 36
 37         switch (status) {
 38             case AFNetworkReachabilityStatusUnknown:
 39                 self.isConnect = NO;
 40                 break;
 41             case AFNetworkReachabilityStatusNotReachable:
 42                 self.isConnect = NO;
 43                 break;
 44             case AFNetworkReachabilityStatusReachableViaWiFi:
 45                 self.isConnect = YES;
 46                 break;
 47             case AFNetworkReachabilityStatusReachableViaWWAN:
 48                 self.isConnect = YES;
 49                 break;
 50             default:
 51                 break;
 52         }
 53
 54     }];
 55
 56     [[AFNetworkReachabilityManager sharedManager] startMonitoring];
 57
 58     self.isConnect = YES;
 59 }
 60
 61 + (HttpClient *)defaultClient {
 62
 63     static HttpClient * instance = nil;
 64     static dispatch_once_t onceToken;
 65     dispatch_once(&onceToken, ^{
 66         instance = [[self alloc] init];
 67     });
 68     return instance;
 69 }
 70
 71 - (void)requestWithPath:(NSString *)url
 72                  method:(NSInteger)method
 73             paramenters:(NSDictionary *)params
 74          prepareExecute:(PrepareExecuteBlock)prepare
 75                 success:(SuccessBlock)success
 76                 failure:(FailureBlock)failure {
 77
 78     NSLog(@"请求网络地址为:%@",url);
 79
 80     if ([self isConnectionAvailable]) {
 81
 82         //预处理
 83         if (prepare) {
 84             prepare();
 85         }
 86
 87         switch (method) {
 88             case HttpRequestGet:
 89                 [self.manager GET:url parameters:params progress:nil success:success failure:failure];
 90                 break;
 91             case HttpRequestPost:
 92                 [self.manager POST:url parameters:params progress:nil success:success failure:failure];
 93                 break;
 94             case HttpRequestPut:
 95                 [self.manager PUT:url parameters:params success:success failure:failure];
 96                 break;
 97             case HttpRequestDelete:
 98                 [self.manager DELETE:url parameters:params success:success failure:failure];
 99                 break;
100             default:
101                 break;
102         }
103
104     } else {
105
106         [self showExceptionDialog];
107     }
108 }
109
110 - (BOOL)isConnectionAvailable {
111
112     return self.isConnect;
113 }
114
115 - (void)showExceptionDialog {
116
117     [[[UIAlertView alloc] initWithTitle:@"提示" message:@"网络连接异常,请检查网络连接" delegate:nil cancelButtonTitle:@"好的" otherButtonTitles: nil] show];
118 }
119
120 @end
 1 #import <UIKit/UIKit.h>
 2 #import "UIImageView+WebCache.h"
 3
 4 typedef void (^DownloadSuccessBlock) (SDImageCacheType cacheType, UIImage *image);
 5 typedef void (^DownloadFailureBlock) (NSError *error);
 6 typedef void (^DownloadProgressBlock) (CGFloat progress);
 7
 8 @interface UIImageView (SDWebImage)
 9
10 /**
11  *  SDWebImage 下载并缓存图片
12  *
13  *  @param url 图片的url
14  *
15  *  @param place 还未下载成功时的替换图片
16  *
17  */
18 - (void)downloadImage:(NSString *)url
19                 place:(UIImage *)place;
20
21 /**
22  *  SDWebImage 下载并缓存图片和下载进度
23  *
24  *  @param url 图片的url
25  *
26  *  @param place 还未下载成功时的替换图片
27  *
28  *  @param success 图片下载成功
29  *
30  *  @param failure 图片下载失败
31  *
32  *  @param progress 图片下载进度
33  */
34 - (void)downloadImage:(NSString *)url
35                 place:(UIImage *)place
36               success:(DownloadSuccessBlock)success
37               failure:(DownloadFailureBlock)failure
38              received:(DownloadProgressBlock)progress;
39
40
41
42 @end
 1 #import "UIImageView+SDWebImage.h"
 2
 3 @implementation UIImageView (SDWebImage)
 4
 5 - (void)downloadImage:(NSString *)url
 6                 place:(UIImage *)place
 7 {
 8     [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:place options:SDWebImageLowPriority | SDWebImageRetryFailed];
 9 }
10
11
12 - (void)downloadImage:(NSString *)url
13                 place:(UIImage *)place
14               success:(DownloadSuccessBlock)success
15               failure:(DownloadFailureBlock)failure
16              received:(DownloadProgressBlock)progress
17 {
18     [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:place options:SDWebImageRetryFailed | SDWebImageLowPriority progress:^(NSInteger receivedSize, NSInteger expectedSize) {
19
20         progress((float)receivedSize/expectedSize);
21
22     } completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
23
24         if (error) {
25             failure(error);
26         }else{
27             // image是下载好的图片
28             self.image = image;
29             success(cacheType, image);
30         }
31     }];
32 }
33
34 @end
时间: 2024-12-26 17:17:14

iOS项目相关@AFN&SDWeb的二次封装的相关文章

IOS项目之弹出动画二

在IOS项目之弹出动画一中只是实现也功能,并没有体现面向对象的思想 ,今天就试着把它封装了一下,弹出视图的内容可以根据自定义,此处只是用UIDatePicker来演示 我把它传到了GitHub上   https://github.com/ywcui/YvanDatePicker.git 一.新建一个类YWDatePicker集成UIView // YvanDatePicker.h #import <UIKit/UIKit.h> typedef void (^selectDate)(NSDate

Ios 项目从头开发 MVVM模式(二)

1.这个项目昨天我想了下,有三大部分,第一部分是根据聚合进行在线数据的一个查询功能,第二部分是xmpp的聊天功能,第三部分是更多功能. 2.在线查询功能,主要用到的技术,就是get请求或者是post请求,这个在线查询功能,我们用到的是聚合的SDK,有自己的API,所以我们就需要单独的去做一些请求的类. 3.xmpp聊天功能,主要用到xmpp协议,框架我们用ios的XMPPFramework-master这个开源项目,详细的功能,我会再详细考虑. 4.更多功能,就是每一个app都会有的一些设置等功

AFN的简单二次封装

可用于登陆,注册,修改密码,获得手机验证码. 首先导入AFN第三方库 NetWorkTool.h // NetWorkTool.h // 网络请求 // // Created by 丁云飞 on 15/11/8. // Copyright © 2015年 DLS. All rights reserved. // #import <Foundation/Foundation.h> #import "AFNetworking.h" @protocol netWorkToolDe

【项目相关】MVC中将WebUploader进行封装

昨天初步将webuploader用在了项目中,但紧接着就发现了一个问题,每一个页面都需要写那么多初始化webUploader的代码,这样肯定是我不能接受的,于是花了半天时间对该控件进行了封装. 最后,只需要引用这一个js文件即可. <script src="~/webuploader/WebUploader_MVC.js"></script> 然后在视图里面加上这几句,其中input是用来在编辑视图中使用,其中PhotoUrls是视图实体属性,用来保存修改后所有

开源 iOS 项目分类索引大全

GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Category类型的库,附带很多自定义控件 功能不错- BlocksKit 将Block风格带入UIKit和Founcation cocoa-helpers 一些Cocoa的扩展 2年前的工程 CoconutKit 一系列扩展和一些自定组件 STUtils 一系列扩展包 PSFoundation 一系列扩展 和功能增强 ConciseK

ios项目里扒出来的json文件

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #d12f1b } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "PingFang SC"; color: #d12f1b } p.p4 {

iOS项目中使用CocoaPods问题解决方案

文/yehot(简书作者)原文链接:http://www.jianshu.com/p/a2007d8e2607著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 为什么iOS项目中应该使用CocoaPods作为第三方依赖管理工具?因为: (全文完) 开个玩笑.真正的原因是这样: 目录: 从一个bug说起 分析需求及解决方案 确定方案 CocoaPods学习资料 一.从一个bug说起: 1.公司的项目里统一使用SVG格式的图片:2.GitHub上只有一个star数超过一千的SVG解析库

iOS项目中常用的第三方开源库

1.项目使用的第三方开源库 http://github.ibireme.com/github/list/ios/整理了比较常用的iOS第三方组件,以及github上的统计. 项目使用了CocoaPods(类似java中的maven)管理常用的第三方库,一些特殊的单独引用,下面介绍下比较好用的几个. (1)AFNetworking 目前比较推荐的iOS网络请求组件,默认网络请求是异步,通过block回调的方式对返回数据进行处理. 需要注意的是AFNetworking对服务器返回的ContentTy

ios项目icon和default图片命名规则

一.应用图片标准iOS控件里的图片资源,苹果已经做了相应的升级,我们需要操心的是应用自己的图片资源.就像当初为了支持iPhone 4而制作的@2x高分辨率版本(译者:以下简称高分)图片一样,我们要为iPad应用中的图片制作对应的高分版本.我知道不少开发者很有预见性的早在iOS 5.0 SDK上就完成了这一步升级.可是我还是要强调一点,那就是之前 Michael Jurewitz (@Jury)在推上提到过的: — 如果想让你的高分图片显示在新iPad上,你必须用Xcode 4.3.1 连同iOS