链式语法学习

在不断填坑中前进。。

Posted by 三十一 on April 25, 2017

链式语法学习

为什么要写一个链式语法的库

最近看了 JHChainableAnimationsMasonry 觉得链式语法写起来用的好爽,就萌生了使用 链式 编写最近使用的一个库,然后又看到了 sindri的小巢 的这篇文章 iOS开发-链式实现数据源

在文章的最后,作者展示了这样的一段代码:

Get(Component(@"user/getUserInfo", nil)).then(^(NSDictionary * result) {
    /// request success
}).failed(^(NSError * error) {
    /// request failed
}).start();

好了,就写一个网路的链式调用库,当做一次链式语法的实践。

具体如何实现

提供调用的方法:

+ (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