AFNetwork作用和用法详解

AFNetwork是一个轻量级的网络请求库,主要用于iOS和macOS平台下网络请求的处理。它是基于NSURLConnection和NSURLSession封装而成的,支持GET、POST、PUT、DELETE等请求方法,并且支持JSON、XML、HTTP序列化格式的解析。AFNetwork的主要作用是为开发者提供了一种方便快捷的网络请求处理方式。

一、AFNetwork的安装与导入

AFNetwork的安装和导入非常简便。使用CocoaPods安装,只需在Podfile中添加下面一行代码:

```

pod 'AFNetworking'

```

然后运行pod install即可。如果不想使用CocoaPods,也可以手动下载导入,详见GitHub官网。

二、AFNetwork的使用

AFNetwork的使用相对于NSURLConnection和NSURLSession来说更为简便。以下将列举几个AFNetwork的常用请求方法。

1. GET请求

AFNetwork的GET请求方法非常简单,只需要调用下面这个方法即可:

```

- (NSURLSessionDataTask *)GET:(NSString *)URLString

parameters:(nullable id)parameters

progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress

success:(void (^)(NSURLSessionDataTask *task, id responseObject))success

failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;

```

上面代码中,URLString表示请求的URL地址,parameters表示请求参数(可以传nil),downloadProgress表示请求进度的回调(可以传nil)。success表示请求成功的回调,responseObject表示服务器返回的数据。failure表示请求失败的回调,error表示请求失败的错误信息。

2. POST请求

同样的,AFNetwork的POST请求方法也非常简单:

```

- (NSURLSessionDataTask *)POST:(NSString *)URLString

parameters:(nullable id)parameters

progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

success:(void (^)(NSURLSessionDataTask *task, id responseObject))success

failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;

```

参数同上面的GET请求方法,其中parameters表示POST请求所需的参数,uploadProgress表示上传进度的回调(可以传nil),success表示请求成功的回调,responseObject表示服务器返回的数据。failure表示请求失败的回调,error表示请求失败的错误信息。

3. 上传文件

如果要发送文件,可以使用下面这个AFNetwork的方法:

```

- (NSURLSessionDataTask *)POST:(NSString *)URLString

parameters:(nullable id)parameters

constructingBodyWithBlock:(nullable void (^)(id formData))block

progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgress

success:(void (^)(NSURLSessionDataTask *task, id responseObject))success

failure:(nullable void (^)(NSURLSessionDataTask *task, NSError *error))failure;

```

上面的参数中,block表示构建要上传的文件,可以使用AFMultipartFormData对象添加数据。如下面的代码所示:

```

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager POST:@"http://example.com/upload"

parameters:nil

constructingBodyWithBlock:^(id formData) {

[formData appendPartWithFileData:imageData

name:@"file"

fileName:@"photo.jpg"

mimeType:@"image/jpeg"];

}

progress:nil

success:^(NSURLSessionDataTask *task, id responseObject) {

NSLog(@"Success");

}

failure:^(NSURLSessionDataTask *task, NSError *error) {

NSLog(@"Failure");

}];

```

上面的代码使用AFMultipartFormData对象添加了一个名为file的文件,文件名为photo.jpg,文件类型为image/jpeg,上传到了URL为http://example.com/upload的服务器上。

4. 下载文件

AFNetwork同样支持文件下载。使用下面这个方法即可:

```

- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request

progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock

destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination

completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler;

```

上面的参数中,request表示下载请求,downloadProgressBlock表示下载进度的回调,destination表示文件下载后保存的路径,completionHandler表示下载完成后的回调。如下面的代码所示:

```

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/file.zip"]];

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];

return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];

} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {

NSLog(@"File downloaded to: %@", filePath);

}];

[downloadTask resume];

```

上面的代码使用AFHTTPSessionManager对象下载了一个文件,下载完成后保存到了app的Documents文件夹。至此,AFNetwork下载文件的示例结束。

三、案例说明

AFNetwork不仅简便易用、功能强大,而且还被广泛应用于各类APP开发中。下面就列举几个典型的案例说明。

1. 音乐APP请求歌曲信息

以音乐APP为例,通过AFNetwork请求歌曲信息的过程如下:

```

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager GET:@"http://example.com/songs"

parameters:nil

progress:nil

success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSArray *songs = responseObject[@"songs"];

for (NSDictionary *song in songs) {

NSString *title = song[@"title"];

NSString *artist = song[@"artist"];

NSString *url = song[@"url"];

// 处理歌曲信息并显示到界面上……

}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"Error: %@", error.localizedDescription);

}];

```

上面的代码使用AFHTTPSessionManager对象请求了一个音乐列表,并将歌曲信息显示在了界面上。其中,responseSerializer表示解析数据的格式。如果返回的数据格式是JSON,那么需要使用AFJSONResponseSerializer对象进行解析。

2. 新闻APP请求文章列表

以新闻APP为例,通过AFNetwork请求文章列表的过程如下:

```

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

[manager GET:@"http://example.com/articles"

parameters:nil

progress:nil

success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSXMLParser *parser = responseObject;

// 处理XML并显示文章列表……

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"Error: %@", error.localizedDescription);

}];

```

上面的代码使用AFHTTPSessionManager对象请求了一个文章列表,并将解析后的文章信息显示在了界面上。其中,responseSerializer表示解析数据的格式。如果返回的数据格式是XML,那么需要使用AFXMLParserResponseSerializer对象进行解析。

3. 社交APP上传图片

以社交APP为例,通过AFNetwork上传图片的过程如下:

```

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

[manager POST:@"http://example.com/upload"

parameters:nil

constructingBodyWithBlock:^(id formData) {

[formData appendPartWithFileData:imageData

name:@"file"

fileName:@"photo.jpg"

mimeType:@"image/jpeg"];

}

progress:nil

success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

NSLog(@"Success");

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"Failure");

}];

```

上面的代码使用AFHTTPSessionManager对象上传了一张图片,并将上传完成后的结果打印在了控制台上。

四、总结

AFNetwork是一个轻量级的网络请求处理库,使用非常简便,且功能强大。它支持GET、POST、PUT、DELETE等请求方法,支持JSON、XML、HTTP序列化格式的解析。通过AFNetwork,可以轻松地实现网络请求,并将返回结果解析后显示在应用程序中。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(58) 打赏

评论列表 共有 1 条评论

蓝鲸小镇少女与海 1年前 回复TA

祝自己前途无量,节节创新。

立即
投稿
发表
评论
返回
顶部