3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "NSData+ImageContentType.h"
14 | #import "SDImageCache.h"
15 | #import "SDWebImageCompat.h"
16 | #import "SDWebImageDecoder.h"
17 | #import "SDWebImageDownloader.h"
18 | #import "SDWebImageDownloaderOperation.h"
19 | #import "SDWebImageManager.h"
20 | #import "SDWebImageOperation.h"
21 | #import "SDWebImagePrefetcher.h"
22 | #import "UIButton+WebCache.h"
23 | #import "UIImage+GIF.h"
24 | #import "UIImage+MultiFormat.h"
25 | #import "UIImageView+HighlightedWebCache.h"
26 | #import "UIImageView+WebCache.h"
27 | #import "UIView+WebCacheOperation.h"
28 |
29 | FOUNDATION_EXPORT double SDWebImageVersionNumber;
30 | FOUNDATION_EXPORT const unsigned char SDWebImageVersionString[];
31 |
32 |
--------------------------------------------------------------------------------
/Demo/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap:
--------------------------------------------------------------------------------
1 | framework module SDWebImage {
2 | umbrella header "SDWebImage-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Demo/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SDWebImage
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
4 | OTHER_LDFLAGS = -framework "ImageIO"
5 | PODS_BUILD_DIR = $BUILD_DIR
6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## WRNetwork
2 |
3 | WRNetwork 是基于 AFNetworking 封装的一套网络请求框架。
4 |
5 |
6 | ## 功能
7 |
8 | - [x] 支持 文件上传和下载
9 | - [x] 支持 GET / POST / DELETE / PUT / HEAD / PATCH 六种请求方式
10 | - [x] 支持 block 和 代理 两种回调请求方式
11 | - [x] 支持 网络请求结果缓存
12 | - [x] 支持 分页请求数据缓存
13 | - [x] 支持 添加缓存过期时间
14 | - [x] 支持 批量请求数据
15 |
16 |
17 | ## 推荐
18 |
19 |
20 |
21 | ## 使用
22 |
23 | 推荐使用方式请看文件 WRApis.h/m
24 |
25 | 发起网络请求(这里会立即发起请求)
26 |
27 | self.reqWXList = req_wx_list(_curPage, self);
28 |
29 |
30 | 请求 成功 / 失败 / 获取缓存 回调
31 |
32 | #pragma mark - WRNetWrapperRequestDelegate
33 | - (void)netWrapperRequestDidSuccess:(WRNetWrapper *)netWrapper {
34 | if (netWrapper == _reqWXList) {
35 | NSDictionary *dict = netWrapper.data;
36 | [self handleResponse:dict];
37 | _reqWXList = nil;
38 | }
39 | }
40 |
41 | - (void)netWrapperRequestDidFailed:(WRNetWrapper *)netWrapper {
42 | if (netWrapper == _reqWXList) {
43 | [self.tableView.mj_footer endRefreshing];
44 | _reqWXList = nil;
45 | }
46 | }
47 |
48 | - (void)netWrapperGetCacheDidFinished:(WRNetWrapper *)netWrapper {
49 | NSDictionary *dict = netWrapper.cache;
50 | [self handleResponse:dict];
51 | }
52 |
53 |
54 | 批量网络请求使用方式
55 |
56 | // ⚠️ 需要注意,这里不会立即发起请求(实现方式请看WRApis.m)
57 | _reqTestA = req_test_a(self);
58 | _reqTestB = req_test_b(self);
59 | _reqTestC = req_test_c(self);
60 | _reqTestD = req_test_d(self);
61 | _reqTestE = req_test_e(self);
62 | _reqTestF = req_test_f(self);
63 |
64 | // 生成多请求对象
65 | _multiReq = [[WRMultiRequest alloc] initWithRequestArray:@[_reqTestA,_reqTestB,_reqTestC,_reqTestD,_reqTestE,_reqTestF]
66 | delegate:self];
67 | // 立即发起请求
68 | [_multiReq loadRequests];
69 |
70 |
71 | 批量请求 成功 / 失败 回调
72 |
73 | #pragma mark - WRMultiRequestDelegate
74 | - (void)multiRequestDidSuccess:(WRMultiRequest *)multiRequest {
75 | NSLog(@"批量请求全部完成~");
76 | }
77 |
78 | - (void)multiRequestDidFailed:(WRMultiRequest *)multiRequest {
79 | NSLog(@"批量请求出错~");
80 | }
81 |
82 |
83 |
84 | 当然你也可以使用 block 的方式
85 |
86 | - (WRNetWrapper *)requestWithURL:(NSString *)urlStr
87 | parameters:(NSDictionary *)parameters
88 | httpMethod:(WRNetWrapperHTTPMethod)httpMethod
89 | isCache:(BOOL)isCache
90 | cacheTime:(NSTimeInterval)cacheTime
91 | cache:(WRNetWrapperGetCacheBlock)cache
92 | success:(WRNetWrapperRequestDidSuccessBlock)success
93 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
94 |
95 |
96 | 上传文件
97 |
98 | + (__kindof NSURLSessionTask *)uploadWithURL:(NSString *)urlStr
99 | parameters:(id)parameters
100 | name:(NSString *)name
101 | filePath:(NSString *)filePath
102 | progress:(WRNetWrapperProgress)progress
103 | success:(WRNetWrapperRequestDidSuccessBlock)success
104 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
105 |
106 |
107 | 下载文件
108 |
109 | + (__kindof NSURLSessionTask *)downloadWithURL:(NSString *)urlStr
110 | fileDir:(NSString *)fileDir
111 | progress:(WRNetWrapperProgress)progress
112 | success:(void(^)(NSString *filePath))success
113 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
114 |
115 |
116 |
117 | ## 安装
118 |
119 | 将 WRNetwork 文件夹拽入项目中,导入头文件:#import "WRNetwork.h"
120 |
121 | ## 协议
122 |
123 | WRNetwork 被许可在 MIT 协议下使用
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/WRNetwork/WRApis.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRApis.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "WRNetWrapper.h"
11 |
12 | typedef id APICallBackDelegate;
13 |
14 |
15 | #pragma mark - 首页
16 | /// 请求 a
17 | WRNetWrapper *req_test_a(APICallBackDelegate callBack);
18 | /// 请求 b
19 | WRNetWrapper *req_test_b(APICallBackDelegate callBack);
20 | /// 请求 c
21 | WRNetWrapper *req_test_c(APICallBackDelegate callBack);
22 | /// 请求 d
23 | WRNetWrapper *req_test_d(APICallBackDelegate callBack);
24 | /// 请求 e
25 | WRNetWrapper *req_test_e(APICallBackDelegate callBack);
26 | /// 请求 f
27 | WRNetWrapper *req_test_f(APICallBackDelegate callBack);
28 |
29 | #pragma mark - 购物车
30 | // xxx 请求接口
31 | // xxx 请求接口
32 | // xxx 请求接口
33 |
34 | #pragma mark - 发现
35 | // xxx 请求接口
36 | // xxx 请求接口
37 | // xxx 请求接口
38 |
39 | #pragma mark - 我的
40 | /// 笑话列表
41 | WRNetWrapper *req_wx_list(int pageIndex, APICallBackDelegate callBack);
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/WRNetwork/WRCache.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRCache.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface WRCache : NSObject
12 |
13 | /// 添加缓存
14 | + (void)addCacheWithData:(id)data URL:(NSString *)urlStr cacheTime:(NSTimeInterval)cacheTime;
15 |
16 | /// 获取缓存
17 | + (id)getCacheWithURL:(NSString *)urlStr;
18 |
19 | /// 删除缓存
20 | + (void)removeCacheWithURL:(NSString *)urlStr;
21 | + (void)removeAllCache;
22 |
23 | @end
24 |
--------------------------------------------------------------------------------
/WRNetwork/WRCache.m:
--------------------------------------------------------------------------------
1 | //
2 | // WRCache.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import "WRCache.h"
10 | #import "WRCacheWrapper.h"
11 |
12 | @implementation WRCache
13 | static NSCache *_cache;
14 |
15 | + (void)initialize {
16 | _cache = [[NSCache alloc] init];
17 | }
18 |
19 | + (void)addCacheWithData:(id)data URL:(NSString *)urlStr cacheTime:(NSTimeInterval)cacheTime {
20 | WRCacheWrapper *cacheWrapper = [_cache objectForKey:urlStr];
21 | if (cacheWrapper == nil) {
22 | cacheWrapper = [[WRCacheWrapper alloc] init];
23 | }
24 | cacheWrapper.data = data;
25 | cacheWrapper.cacheTime = cacheTime;
26 | [_cache setObject:cacheWrapper forKey:urlStr];
27 | }
28 |
29 | + (id)getCacheWithURL:(NSString *)urlStr {
30 | WRCacheWrapper *cacheWrapper = [_cache objectForKey:urlStr];
31 | if (cacheWrapper.isEmpty || cacheWrapper.isExpire) {
32 | // 如果过期了,就把缓存删除
33 | [self removeCacheWithURL:urlStr];
34 | return nil;
35 | }
36 | return cacheWrapper.data;
37 | }
38 |
39 | + (void)removeCacheWithURL:(NSString *)urlStr {
40 | [_cache removeObjectForKey:urlStr];
41 | }
42 |
43 | + (void)removeAllCache {
44 | [_cache removeAllObjects];
45 | }
46 |
47 | @end
48 |
49 |
--------------------------------------------------------------------------------
/WRNetwork/WRCacheWrapper.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRCacheWrapper.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface WRCacheWrapper : NSObject
12 |
13 | @property (nonatomic, strong) id data;
14 | @property (nonatomic, assign) NSTimeInterval cacheTime; // 设置多久过期,默认不过期
15 | @property (nonatomic, assign, readonly) BOOL isExpire; // 判断是否过期
16 | @property (nonatomic, assign, readonly) BOOL isEmpty; // 判断 data 是否为空
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/WRNetwork/WRCacheWrapper.m:
--------------------------------------------------------------------------------
1 | //
2 | // WRCacheWrapper.m
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import "WRCacheWrapper.h"
10 |
11 | @interface WRCacheWrapper ()
12 |
13 | @property (nonatomic, copy) NSDate *lastUpdateDate; // 最近一次更新时间
14 |
15 | @end
16 |
17 | @implementation WRCacheWrapper
18 |
19 | - (BOOL)isEmpty {
20 | return (_data == nil || _data == [NSNull null]);
21 | }
22 |
23 | - (BOOL)isExpire {
24 | NSTimeInterval timeInterval = [[NSDate date] timeIntervalSinceDate:self.lastUpdateDate];
25 | return (_cacheTime != 0 && timeInterval > _cacheTime);
26 | }
27 |
28 | - (void)setData:(id)data {
29 | _data = [data copy];
30 | _lastUpdateDate = [NSDate dateWithTimeIntervalSinceNow:0];
31 | }
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/WRNetwork/WRMultiRequest.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRMultiRequest.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import
10 | @class WRMultiRequest;
11 | @class WRNetWrapper;
12 |
13 | /// 多个请求成功或失败回调
14 | @protocol WRMultiRequestDelegate
15 | - (void)multiRequestDidSuccess:(WRMultiRequest *)multiRequest;
16 | - (void)multiRequestDidFailed:(WRMultiRequest *)multiRequest;
17 | @end
18 |
19 | @interface WRMultiRequest : NSObject
20 |
21 | @property (nonatomic, weak) id delegate;
22 |
23 | /// 初始化方法
24 | - (instancetype)initWithRequestArray:(NSArray *)requestArray delegate:(id)delegate;
25 |
26 | /// 发起网络请求
27 | - (void)loadRequests;
28 |
29 | /// 取消网络请求
30 | - (void)cancelAllRequest;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/WRNetwork/WRMultiRequest.m:
--------------------------------------------------------------------------------
1 | //
2 | // WRBatchRequest.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 | #import "WRMultiRequest.h"
10 | #import "WRNetWrapper.h"
11 |
12 | @interface WRMultiRequest ()
13 | @property (nonatomic, strong) NSMutableArray *requestArray;
14 | @end
15 |
16 | @implementation WRMultiRequest
17 |
18 | - (instancetype)initWithRequestArray:(NSArray *)requestArray delegate:(id)delegate {
19 | self = [super init];
20 | if (self) {
21 | _requestArray = [requestArray mutableCopy];
22 | _delegate = delegate;
23 | }
24 | return self;
25 | }
26 |
27 | - (void)loadRequests {
28 | if (!_requestArray || _requestArray <= 0) return;
29 |
30 | for (WRNetWrapper *req in _requestArray) {
31 | req.mulitDelegate = self;
32 | [req loadRequest];
33 | }
34 | }
35 |
36 | #pragma mark - WRNetWrapperRequestDelegate
37 | - (void)netWrapperRequestDidSuccess:(WRNetWrapper *)netWrapper {
38 | [_requestArray removeObject:netWrapper];
39 | if (_requestArray.count == 0) {
40 | if ([_delegate respondsToSelector:@selector(multiRequestDidSuccess:)]) {
41 | [_delegate multiRequestDidSuccess:self];
42 | }
43 | }
44 | }
45 | - (void)netWrapperRequestDidFailed:(WRNetWrapper *)netWrapper {
46 | [self cancelAllRequest];
47 | if ([_delegate respondsToSelector:@selector(multiRequestDidFailed:)]) {
48 | [_delegate multiRequestDidFailed:self];
49 | }
50 | }
51 |
52 | - (void)cancelAllRequest {
53 | for (WRNetWrapper *req in _requestArray) {
54 | [req.sessionTask cancel];
55 | }
56 | _requestArray = nil;
57 | }
58 |
59 | - (void)dealloc {
60 | [self cancelAllRequest];
61 | }
62 |
63 | @end
64 |
--------------------------------------------------------------------------------
/WRNetwork/WRNetWrapper.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRNetWrapper.h
3 | // PandaMakeUp
4 | //
5 | // Created by wangrui on 2016/7/28.
6 | // Copyright © 2016年 lrlz. All rights reserved.
7 | //
8 |
9 |
10 | #import
11 | #import "WRCache.h"
12 | @class AFHTTPSessionManager;
13 | @class WRNetWrapper;
14 |
15 | typedef NS_ENUM (NSUInteger, WRNetWrapperHTTPMethod) {
16 | WRNetWrapperHTTPMethodGET = 0,
17 | WRNetWrapperHTTPMethodPOST,
18 | WRNetWrapperHTTPMethodPUT,
19 | WRNetWrapperHTTPMethodDELETE,
20 | WRNetWrapperHTTPMethodHEAD,
21 | WRNetWrapperHTTPMethodPATCH
22 | };
23 |
24 | typedef NS_ENUM(NSUInteger, WRNetworkStatus) {
25 | WRNetworkStatusUnknown = 0, /// 未知网络
26 | WRNetworkStatusNotReachable, /// 无网络
27 | WRNetworkStatusReachableViaWWAN, /// 手机网络
28 | WRNetworkStatusReachableViaWIFI /// WIFI网络
29 | };
30 |
31 | /// 请求成功/失败/获取缓存的Block
32 | typedef void(^WRNetWrapperRequestDidSuccessBlock)(id data);
33 | typedef void(^WRNetWrapperRequestDidFailedBlock)(NSError *error);
34 | typedef void(^WRNetWrapperGetCacheBlock)(id cache);
35 |
36 | /// 上传或下载的进度 (completedUnitCount:当前大小 totalUnitCount:总大小)
37 | typedef void (^WRNetWrapperProgress)(NSProgress *progress);
38 |
39 | /// 网络状态变更的Block
40 | typedef void(^WRNetworkStatusChangeBlock)(WRNetworkStatus status);
41 |
42 | /// api回调 (请求成功、失败、获取缓存)
43 | @protocol WRNetWrapperRequestDelegate
44 | @required
45 | - (void)netWrapperRequestDidSuccess:(WRNetWrapper *)netWrapper;
46 | - (void)netWrapperRequestDidFailed:(WRNetWrapper *)netWrapper;
47 | @optional
48 | - (void)netWrapperGetCacheDidFinished:(WRNetWrapper *)netWrapper;
49 | @end
50 |
51 | /// 数据源
52 | @protocol WRNetWrapperDataSource
53 | @required
54 | - (NSDictionary *)netWrapperParametersForApi:(WRNetWrapper *)netWrapper;
55 | - (NSString *)netWrapperBaseURLForApi:(WRNetWrapper *)netWrapper;
56 | - (NSString *)netWrapperRequestNameForApi:(WRNetWrapper *)netWrapper;
57 | - (WRNetWrapperHTTPMethod)netWrapperHttpMethodForApi:(WRNetWrapper *)netWrapper;
58 | @optional
59 | - (BOOL)netWrapperIsCacheForApi:(WRNetWrapper *)netWrapper;
60 | - (NSTimeInterval)newWrapperCacheTimeForApi:(WRNetWrapper *)netWrapper;
61 | @end
62 |
63 | /// 拦截器
64 | @protocol WRNetWrapperInterceptor
65 | @optional
66 | - (void)netWrapperInterceptorFailForApi:(WRNetWrapper *)netWrapper;
67 | - (void)netWrapperInterceptorSuccessForApi:(WRNetWrapper *)netWrapper;
68 | @end
69 |
70 |
71 |
72 | @interface WRNetWrapper : NSObject
73 |
74 | @property (nonatomic, weak) id delegate;
75 | @property (nonatomic, weak) id mulitDelegate;
76 | @property (nonatomic, weak) id dataSource;
77 | @property (nonatomic, weak) id interceptor;
78 |
79 | @property (nonatomic, copy, readonly) NSString *requestURL; // 请求的 url
80 | @property (nonatomic, copy, readonly) NSString *errorMessage; // 错误信息
81 | @property (nonatomic, assign, readonly) NSInteger statusCode; // http 状态码
82 | @property (nonatomic, strong, readonly) NSError *error; // 请求失败返回的 error
83 | @property (nonatomic, strong, readonly) id data; // 请求成功数据
84 | @property (nonatomic, strong, readonly) id cache; // http chche
85 | @property (nonatomic, assign, readonly) NSTimeInterval cacheTime; // 缓存时长(0表示不过期)
86 | @property (nonatomic, strong, readonly) NSURLSessionTask *sessionTask;
87 |
88 | /// 是否有网络
89 | + (BOOL)isNetworkReachable;
90 | /// 是否有网络并且是蜂窝移动网
91 | + (BOOL)isNetworkReachableViaWWAN;
92 | /// 是否有网络并且是无线网
93 | + (BOOL)isNetworkReachableViaWIFI;
94 | /// 实时获取网络状态
95 | + (void)setReachableStatusChangeBlock:(WRNetworkStatusChangeBlock)changeBlock;
96 |
97 |
98 | /// 取消 HTTP 请求
99 | + (void)cancelAllRequest;
100 | + (void)cancelRequestWithURL:(NSString *)urlStr;
101 |
102 |
103 | /// 发起网络请求以 delegate 的方式回调 (这里只适合遵守了 delegate 和 dataSource 两个协议对象使用)
104 | - (void)loadRequest;
105 |
106 | /// 网络请求以 block 的方式回调
107 | - (WRNetWrapper *)requestWithURL:(NSString *)urlStr
108 | parameters:(NSDictionary *)parameters
109 | httpMethod:(WRNetWrapperHTTPMethod)httpMethod
110 | isCache:(BOOL)isCache
111 | cacheTime:(NSTimeInterval)cacheTime
112 | cache:(WRNetWrapperGetCacheBlock)cache
113 | success:(WRNetWrapperRequestDidSuccessBlock)success
114 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
115 |
116 | /// 上传文件
117 | + (__kindof NSURLSessionTask *)uploadWithURL:(NSString *)urlStr
118 | parameters:(id)parameters
119 | name:(NSString *)name
120 | filePath:(NSString *)filePath
121 | progress:(WRNetWrapperProgress)progress
122 | success:(WRNetWrapperRequestDidSuccessBlock)success
123 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
124 |
125 | /// 下载文件
126 | + (__kindof NSURLSessionTask *)downloadWithURL:(NSString *)urlStr
127 | fileDir:(NSString *)fileDir
128 | progress:(WRNetWrapperProgress)progress
129 | success:(void(^)(NSString *filePath))success
130 | failure:(WRNetWrapperRequestDidFailedBlock)failure;
131 |
132 | @end
133 |
134 |
--------------------------------------------------------------------------------
/WRNetwork/WRNetwork.h:
--------------------------------------------------------------------------------
1 | //
2 | // WRNetwork.h
3 | // WRNetWrapper
4 | //
5 | // Created by itwangrui on 2018/2/5.
6 | // Copyright © 2018年 itwangrui. All rights reserved.
7 | //
8 |
9 | #ifndef WRNetwork_h
10 | #define WRNetwork_h
11 |
12 | #import "WRApis.h"
13 | #import "WRMultiRequest.h"
14 |
15 |
16 | #endif /* WRNetwork_h */
17 |
--------------------------------------------------------------------------------
/screenshots/WRApis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangrui460/WRNetwork/f9109d8bd1c6cd7b7bebfc026730217f02f096bd/screenshots/WRApis.png
--------------------------------------------------------------------------------