测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布最后发布 | 2015年3月 |
由 未认领 维护。
依赖项 | |
AFNetworking | ~> 2.0 |
ReactiveCocoa | ~> 2.0 |
AFNetworking-RACExtensions 是 iOS 和 Mac OS X 上 AFNetworking 类的一个令人愉快的扩展。它基于 ReactiveCocoa、AFNetworking 和其他熟悉的基础技术构建。它提供了对底层模块化架构的扩展,具有设计良好的包装 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,或者将现有项目迁移过来——您会因为它而感到世界观发生了变化!
git submodule update -i --recursive
)。pod 'AFNetworking-RACExtensions', '~>0.0.1'
_BEGIN_HTML_DECLS
阅读头文件。诚实地讲,它们确实有一些很好的关于如何使用这些功能的说明。
_END_HTML_DECLS
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];
}];
// 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以上版本。
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)。
AFNetworking+RACExtensions在开源许可下免费提供,同时还包括AFNetworking所使用的MIT许可。请自行承担使用风险。