美文网首页
链式编程

链式编程

作者: jiangamh | 来源:发表于2016-01-08 00:14 被阅读165次

最近接触了RAC,自然也就接触了链式编程,链式编程挺有意思的,代码让人感觉很简洁,masonry中就用到了链式编程,我也学习了一下,写了个简单的代码练习一下链式编程。如AXExtentString类可以采用链式编程的方式追加字符串,代码如下:

@interface AXExtentString : NSObject

-(AXExtentString *(^)(NSString *str))addStr;
-(NSString*)string;

@end

源代码如下:

#import "AXExtentString.h"

@interface AXExtentString ()

@property(nonatomic,copy)NSMutableString *mutableStr;

@end

@implementation AXExtentString

-(id)init
{
    if (self = [super init]) {
        
    }
    return self;
}

-(AXExtentString *(^)(NSString *str))addStr
{
    return ^AXExtentString*(NSString * str){
        [self.mutableStr appendString:str];
        return self;
    };
}

-(NSMutableString*)mutableStr
{
    if (!_mutableStr) {
        _mutableStr = [NSMutableString string];
    }
    return _mutableStr;
}

-(NSString*)string
{
    return self.mutableStr;
}

@end

模仿masonry写了个分类,代码如下:

#import <Foundation/Foundation.h>
#import "AXExtentString.h"

@interface NSObject (ExtentString)

+(NSString*)makerString:(void(^)(AXExtentString * str))block;

@end

源码:

#import "NSObject+ExtentString.h"

@implementation NSObject (ExtentString)

+(NSString*)makerString:(void(^)(AXExtentString * str))block
{
    AXExtentString *str = [[AXExtentString alloc] init];
    block(str);
    return [str string];
}

@end

使用如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    AXExtentString *string =[[AXExtentString alloc] init];
    string.addStr(@"have ").addStr(@"a ").addStr(@"test").addStr(@"!");
    NSLog(@"string:%@",[string string]);
    
    NSString *str = [NSObject makerString:^(AXExtentString *str) {
        str.addStr(@"have ").addStr(@"a ").addStr(@"test").addStr(@"!");
    }];
    NSLog(@"str:%@",str);
}

运行结果如下:

屏幕快照 2016-01-07 下午11.54.57.png

个人对链式编程的理解:
首先方法中没有参数,如addStr函数,运算的参数通过addStr返回的block传递,当然也可以有参数但是就不能全部通过.进行调用,破坏了链式编程的优雅。addStr返回的block也有要求。
block要求1:
block要有返回值类型为对应的类的类型,比如addStr返回的block返回类型为AXExtentString,这是为了保证调用返回的block调用后能返回对应的类型,这样才能继续用.调用addStr函数。
block要求2:
block参数要求,比如addStr返回的block,参数为NSSting类型,因为内部需要这个参数进行运算,当然也可为其他类型,甚至可以没有参数,这取决于你的需求,说白了其实也没有要求,我只是想强调的是这里的参数更多的取决于你的需求,我们要明白类提供的方法没有参数,往往运算需要参数,这里是通过block传递参数的。

代码上传github:https://github.com/jiangtaidi/LsCodeDemo

相关文章

  • jQuery 链式编程

    jQuery 链式编程 链式编程原理 链式编程代码示例 隐式迭代

  • 链式编程思想

    链式编程思想 链式编程思想

  • iOS 链式编程

    链式编程 主要介绍链式编程原理,以及如何创建链式编程 编程范式 在介绍链式编程之前,首先来了解下什么是编程范式。 ...

  • ReactiveObjC入门

    ReactiveObjC基础用法 iOS开发三种编程方式(响应式编程、函数编程、链式编程),函数编程最常用,链式编...

  • 工作iOS技术总结

    链式编程、函数式、面向接口编程思想 iOS 之ReactiveCocoa 链式编程2 WKWebView的缓存处理...

  • 一、链式编程思想、响应式编程思想和函数式编程

    1. 链式编程思想 链式编程思想的核心就是方法的返回值必须是Block,Masonry是链式编程思想应用的代表。 ...

  • 链式编程和函数式编程的简单理解

    链式编程 此前看到SnipKit中运用了很多链式编程的代码,感觉非常好用:例如: //此段就是链式编程的典型代码m...

  • 编程思想-链式编程

    编程思想-链式编程 链式编程(链式调用)的主要表现是支持点语法结构的代码,代表库可以参照 Masonry 或 Sn...

  • 链式编程

    链式编程

  • iOS 链式编程

    之前看到 Masonry 是使用链式编程,感觉很酷,自己简单的写了一个链式编程的示例! 首先简单的来说一下链式编程...

网友评论

      本文标题:链式编程

      本文链接:https://www.haomeiwen.com/subject/novfkttx.html