为什么要写一个链式语法的库
最近看了 JHChainableAnimations 和 Masonry 觉得链式语法写起来用的好爽,就萌生了使用 链式 编写最近使用的一个库,然后又看到了 sindri的小巢 的这篇文章 iOS开发-链式实现数据源。
在文章的最后,作者展示了这样的一段代码:
Get(Component(@"user/getUserInfo", nil)).then(^(NSDictionary * result) {
/// request success
}).failed(^(NSError * error) {
/// request failed
}).start();
好了,就写一个网路的链式调用库,当做一次链式语法的实践。
具体如何实现
SYrequest.png提供调用的方法:
+ (apiAddress )requestURLString;
+ (apiAddress)Get;
+ (apiAddress)Post;
- (apiAddress )requestURLString;
- (apiAddress)Get;
- (apiAddress)Post;
- (head)addHeadersy;
- (params)addParameters;
- (body)addBody;
- (httpMethod)httpMethod;
- (parameterEncoding)addParameterEncoding;
- (startRequest)start;
- (cancelRequest)cancel;
- (suspendRequest)suspend;
- (resumeRequest)resume;
- (response)response;
- (void)clearCompletionBlock;
使用示例:
SYRequest *requset = [[SYRequest alloc] init];
requset.requestURLString(@"https://www.metaweather.com/api/location/search/")
.httpMethod(SYHTTPMethod_GET)
.addParameters(@{@"query":@"sa"})
.start(^(BOOL sucess,id responseData,NSError *error){
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
NSLog(@"jsonDic = %@",jsonDic);
});
或者:
SYRequest.requestURLString(@"https://www.metaweather.com/api/location/search/")
.httpMethod(SYHTTPMethod_GET)
.addParameters(@{@"query":@"sa"})
.start(^(BOOL sucess,id responseData,NSError *error){
NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
NSLog(@"jsonDic = %@",jsonDic);
});
具体的就没什么说的,实现起来就是这样: 方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
,只要按照这个条件写,就可以写出一个自己的链式库。
具体代码地址 SYRequest
网友评论