AFNetworking2-RACExtensions 0.0.1

AFNetworking2-RACExtensions 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年3月

未认领 维护。



 
依赖项
AFNetworking~> 2.0
ReactiveCocoa~> 2.0
 

  • 作者
  • Robert Widmann

AFNetworking-RACExtensions 是 iOS 和 Mac OS X 上 AFNetworking 类的一个令人愉快的扩展。它基于 ReactiveCocoaAFNetworking 和其他熟悉的基础技术构建。它提供了对底层模块化架构的扩展,具有设计良好的包装 API(易于使用)。例如,从 URL 获取 JSON 如此简单:

NSURL *url = [NSURL URLWithString:@"https://alpha-api.app.net/stream/0/posts/stream/global"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [[AFJSONRequestOperation rac_startJSONRequestOperationWithRequest:request]subscribeNext:^(RACTuple *JSONTuple) {
    //Voila, magical JSON… well, maybe call `JSONTuple.first`, first.
}];

然而,最引人注目的是所有这些中最重要的功能,那就是每天使用并贡献于 AFNetworking 和 ReactiveCocoa 的发展的出色开发者社区。AFNetworking 为 iPhone、iPad 和 Mac 上一些最受欢迎和好评如潮的应用程序提供动力,而 AFNetworking+RACExtensions 也为这个小程序提供动力……所以是的。

为您的下一个项目选择 AFNetworking,然后选择 AFNetworking+RACExtensions,或者将现有项目迁移过来——您会因为它而感到世界观发生了变化!

如何开始

概述

_BEGIN_HTML_DECLS

阅读头文件。诚实地讲,它们确实有一些很好的关于如何使用这些功能的说明。

_END_HTML_DECLS

示例用法

XML 请求

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://api.flickr.com/services/rest/?method=flickr.groups.browse&api_key=b6300e17ad3c506e706cb0072175d047&cat_id=34427469792%40N01&format=rest"]];
AFXMLRequestOperation *operation = [[AFXMLRequestOperation rac_startXMLParserRequestOperationWithRequest:request]subscribeNext:^(RACTuple *res) {
  NSXMLParser *XMLParser = res.first;
  XMLParser.delegate = self;
  [XMLParser parse];
}];

图像请求

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];

好吧,即使是我也觉得这一点做得有点少。以下介绍如何仅使用响应式API来这样做

(真实) 图像请求

RACSubject *imageSubject = [RACSubject subject];
[self.afLogoImageView rac_liftSelector:@selector(setImage:) withObjects:imageSubject];
NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://raw.github.com/AFNetworking/AFNetworking/gh-pages/afnetworking-logo.png"]];

[[[AFImageRequestOperation rac_startImageRequestOperationWithRequest:imageRequest]map:^id(RACTuple *values) {
  return [values first];
}]subscribeNext:^(UIImage *image) {
  [imageSubject sendNext:image];
}];

API客户端请求

// AFAppDotNetAPIClient is a subclass of AFHTTPClient, which defines the base URL and default HTTP headers for NSURLRequests it creates
[[[AFAppDotNetAPIClient sharedClient] rac_getPath:@"stream/0/posts/stream/global" parameters:nil]subscribeNext:^(RACTuple *next) {
    NSLog(@"App.net Global Stream: %@", next.first);
}];

带进度回调的文件上传

NSURL *url = [NSURL URLWithString:@"http://api-base-url.com"];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"avatar.jpg"], 0.5);
NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
    [formData appendPartWithFileData:imageData name:@"avatar" fileName:@"avatar.jpg" mimeType:@"image/jpeg"];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[[httpClient rac_enqueueHTTPRequestOperation:operation]subscribeCompleted:^{
  //We're Done here
}];

流请求

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://127.0.0.1:8080/encode"]];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.inputStream = [NSInputStream inputStreamWithFileAtPath:[[NSBundle mainBundle] pathForResource:@"large-image" ofType:@"tiff"]];
operation.outputStream = [NSOutputStream outputStreamToMemory];
[[operation rac_start]subscribeCompleted^{

}];

要求

AFNetworking 1.0及以上版本需要iOS 5.0及以上版本,或者Mac OS 10.7(包含64位现代Cocoa运行时)及以上版本。

为了与iOS 4.3保持兼容,请使用AFNetworking的最新0.10.x版本。在理论上,ReactiveCocoa可以跨越大多数iOS版本工作,但在使用扩展时,最好只支持4.0以上版本。

自动引用计数(ARC)

AFNetworking(+RACExtensions)从1.0版本开始使用ARC。ReactiveCocoa自初始提交以来就使用了ARC。

如果您在非ARC项目中使用AFNetworking(+RACExtensions) 1.0,您需要在所有AFNetworking(+RACExtensions)源文件上设置-fobjc-arc编译器标志。相反,如果您正在添加AFNetworking 1.0之前的版本,您需要设置-fno-objc-arc编译器标志,但在使用RAC和扩展时仍然需要设置-fobjc-arc标志。

要在Xcode中设置编译器标志,请转到您活动的目标并选择“构建阶段”选项卡。现在选择所有AFNetworking源文件,按Enter键,输入-fobjc-arc或-fno-objc-arc,然后选择“完成”来为AFNetworking启用或禁用ARC。

鸣谢

ReactiveCocoa是由Justin Spahr-Summers和Josh Abernathy在追求某种LINQ/EML/C# /Haskell等类似东西的过程中创建的。这很酷,就这么回事。

AFNetworking是由Scott Raymond和Mattt Thompson在开发iPhone应用Gowalla时创建的。

AFNetworking的标志是由Alan Defibaugh设计的。

最重要的是,感谢AFNetworking的不断增多的贡献者

联系方式

关注AFNetworking在Twitter上的动态(@AFNetworking) 不要关注Twitter上的AFNetworking+RACExtensions(404)。

创建者 创建者

Robert Widmann
@CodaFi_

许可协议

AFNetworking+RACExtensions在开源许可下免费提供,同时还包括AFNetworking所使用的MIT许可。请自行承担使用风险。