1.Swift
import AFNetworking
let blogDomain = "com.baidu.data.error"
//swift 中的枚举
enum HTTPType : String {
case POST = "POST"
case GET = "GET"
}
//创建网络分类,隔离 AFN框架与 自身代码
class Networktools: AFHTTPSessionManager {
//定义单例对象,设置属性
static let shareTools : Networktools = {
let baseUrl = "https://api.weibo.com/"
let tools = Networktools(baseURL: NSURL(string: baseUrl))
tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
return tools
} ()
func requestJsonDict( type : HTTPType , urlSting : String, parameters: [String : AnyObject]?,finished : (result : [String : AnyObject]? , error : NSError? )->() ) {
if type == HTTPType.GET {
GET(urlSting, parameters: parameters, success: { (_, result) -> Void in
//判断是否是字典
if let dict = result as? [String : AnyObject] {
finished(result: dict, error: nil)
return
}
//如果不是字典,返回自定义错误
let dataError = NSError(domain: blogDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])
finished(result: nil, error: dataError)
}, failure: { (_, error) -> Void in
finished(result: nil, error: error)
print(error)
})
} else {
POST(urlSting, parameters: parameters, success: { (_, result) -> Void in
//判断是否是字典
if let dict = result as? [String : AnyObject] {
finished(result: dict, error: nil)
return
}
//如果不是字典,返回自定义错误
let dataError = NSError(domain: blogDomain, code: -10000, userInfo: [NSLocalizedDescriptionKey : "数据错误"])
finished(result: nil, error: dataError)
}, failure: { (_, error) -> Void in
finished(result: nil, error: error)
print(error)
})
}
}
//上传图片的方法
func uploadPicture(urlSting : String, parameters: [String : AnyObject]?,imageData : NSData,finished : (result : [String : AnyObject]? , error : NSError? )->() ){
POST(urlSting, parameters: parameters, constructingBodyWithBlock: { (multipartFormData) -> Void in
/**
* imageData,图片的二进制数据
name : 上传到服务器的对应接口名
fileName : 服务器接收到存储的名字
mimeType : 上传文件的格式
*/
multipartFormData.appendPartWithFileData(imageData, name: "pic", fileName: "OMG", mimeType: "image/jpeg")
}, success: { (_, result) -> Void in
//成功会掉
if let dict = result as? [String : AnyObject] {
finished(result: dict, error: nil)
}
}) { (_, error) -> Void in
//失败回调
finished(result: nil, error: error)
}
}
}
2.OC
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
typedef enum : NSUInteger {
HTTPMethodPOST,
HTTPMethodGET,
} HTTPMethod;
@interface XFNetworkTools : AFHTTPSessionManager
+ (instancetype)shareNetWorkTools;
/**
* 封装网络,隔离 AFN 框架
*
* @param httpMethod 请求类型
* @param urlString 接口
* @param parameters 参数
* @param finished 完成回调
*/
- (void)requestJsonDictWithHttpMothod:(HTTPMethod)httpMethod
Urlstring:(NSString *)urlString
Parameters:(NSDictionary *)parameters
AndFinished:(Finished)finished;
- (void)uploadImageWithUrlstring:(NSString *)urlString
Parameters:(NSDictionary *)parameters
ImageData:(NSData *)imageData
AndFinished:(Finished)finished;
@end
#import "XFNetworkTools.h"
static NSString *blogDomain = @"com.baidu.data.error";
@protocol XFNetworkToolsProxy <NSObject>
@optional
- (NSURLSessionDataTask *)
dataTaskWithHTTPMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(NSURLSessionDataTask *, id))success
failure:(void (^)(NSURLSessionDataTask *, NSError *))failure;
@end
@interface XFNetworkTools () <XFNetworkToolsProxy>
@end
@implementation XFNetworkTools
static XFNetworkTools *singleTools = nil;
+ (instancetype)shareNetWorkTools {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//末尾要加"/"
singleTools = [[self alloc]
initWithBaseURL:[NSURL URLWithString:@"https://api.weibo.com/"]];
//设置反序列化的格式
singleTools.responseSerializer.acceptableContentTypes = [NSSet
setWithObjects:@"application/json", @"text/json", @"text/javascript",
@"text/html", @"text/plain", nil];
});
return singleTools;
}
- (void)requestJsonDictWithHttpMothod:(HTTPMethod)httpMethod
Urlstring:(NSString *)urlString
Parameters:(NSDictionary *)parameters
AndFinished:(Finished)finished {
// NSString *methodName = (httpMethod == HTTPMethodGET) ? @"GET" : @"POST";
//
// [self dataTaskWithHTTPMethod:methodName
// URLString:urlString
// parameters:parameters
// success:^(NSURLSessionDataTask *task, id responseObject) {
// if ([responseObject isKindOfClass:[NSDictionary class]]) {
// finished(nil, responseObject);
// } else {
// NSError *dataError = [[NSError alloc]
// initWithDomain:blogDomain
// code:-10000
// userInfo:@{
// NSLocalizedDescriptionKey : @"数据错误"
// }];
// finished(dataError, nil);
// }
//
// }
// failure:^(NSURLSessionDataTask *task, NSError *error) {
// finished(error, nil);
// }];
if (httpMethod == HTTPMethodPOST) {
[self POST:urlString
parameters:parameters
success:^(NSURLSessionDataTask *_Nonnull task,
id _Nonnull responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
finished(nil, responseObject);
} else {
NSError *dataError = [[NSError alloc]
initWithDomain:blogDomain
code:-10000
userInfo:@{
NSLocalizedDescriptionKey : @"数据错误"
}];
finished(dataError, nil);
}
}
failure:^(NSURLSessionDataTask *_Nullable task,
NSError *_Nonnull error) {
finished(error, nil);
}];
} else {
[self GET:urlString
parameters:parameters
success:^(NSURLSessionDataTask *_Nonnull task,
id _Nonnull responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
//成功的回调
finished(nil, responseObject);
} else {
NSError *dataError = [[NSError alloc]
initWithDomain:blogDomain
code:-10000
userInfo:@{
NSLocalizedDescriptionKey : @"数据错误"
}];
finished(dataError, nil);
}
}
failure:^(NSURLSessionDataTask *_Nullable task,
NSError *_Nonnull error) {
finished(error, nil);
}];
}
}
- (void)uploadImageWithUrlstring:(NSString *)urlString
Parameters:(NSDictionary *)parameters
ImageData:(NSData *)imageData
AndFinished:(Finished)finished {
[self POST:urlString
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
/**
* FileData 图片二进制数据
name 上传到服务器的对应接口名
fileName 保存到服务器的图片名字
mimeType 图片类型
*/
[formData appendPartWithFileData:imageData
name:@"pic"
fileName:@"tupian"
mimeType:@"image/jpeg"];
}
success:^(NSURLSessionDataTask *_Nonnull task,
id _Nonnull responseObject) {
finished(nil, responseObject);
}
failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {
finished(error, nil);
}];
}
@end