iOS链式语法的实现

作者: Jinfei_Chen | 来源:发表于2016-09-14 04:00 被阅读926次

最近都失眠,干脆起床写博客!
首先来看看一段代码:

[self.view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(50);
        make.right.mas_equalTo(-50);
        make.top.mas_equalTo(50);
        make.bottom.mas_equalTo(-50);
    }];

对,这个就是Objective-C的 点链式语法 ,本文就写写关于点链式语法的实现, 直接上代码:

CalculatorTools.h

@interface CalculatorTools : NSObject

// 计算结果
@property (nonatomic, assign) NSInteger result;

// 加法
- (CalculatorTools *(^)(NSInteger num)) add;
// 减法
- (CalculatorTools *(^)(NSInteger num)) minus;
// 乘法
- (CalculatorTools *(^)(NSInteger num)) multiply;
// 除法
- (CalculatorTools *(^)(NSInteger num)) divide; 

@end

CalculatorTools.m

@implementation CalculatorTools

- (instancetype) init 
{
    self != [super init] ;
    if ( ! self )
    {
        return nil;
    }
    self.result = 0;
    return self;
}

- (CalculatorTools *(^)(NSInteger num)) add 
{
    return ^id(NSInteger num){
        self.result += num;
        return self;
    };
}

- (CalculatorTools *(^)(NSInteger num)) minus
{
    return ^id(NSInteger num){
         self.result -= num;
         return self;
    };
}

- (CalculatorTools *(^)(NSInteger num)) multiply
{
    return ^id(NSInteger num){
        self.result *= num;
        return self;
    };
}

- (CalculatorTools *(^)(NSInteger num)) divide 
{
    return ^id(NSInteger num){
        // 使用断言NSAssert()调试程序错误
        NSAssert(num != 0, @"除数不能为零");
        self.result /= num;
        return self;
    };
}

@end

接下来就是调用 :

CalculatorTools *cal = [[CalculatorTools alloc] init];
cal.add(1).minus(2).multiply(3).divide(4);
NSLog(@"result = %ld", cal.result);

可以看出,都是一些对block的运用,在这些block中,返回值都是self本身,当调用的时候,流程是这样的:
首先获得实例中的一个block,然后执行block并返回实例本身,然后再执行实例的另一个block,而在这个block中同样返回实例本身,按此规律通过点语法一直往下执行。
就是这么简单,大家慢慢体会,本文有任何不足之处,欢迎大家不吝指教,一起探讨学习!

参考:
1、[使用断言NSAssert()调试程序错误][http://blog.sina.com.cn/s/blog_75992b660101kbj2.html]

相关文章

  • Objective-C实现链式编程语法(DSL)

    Objective-C实现链式编程语法(DSL) Objective-C实现链式编程语法(DSL)

  • iOS链式语法的实现

    最近都失眠,干脆起床写博客!首先来看看一段代码: 对,这个就是Objective-C的 点链式语法 ,本文就写写关...

  • 在Objective-C中实现链式语法

    其他语言比如 Lua, 实现链式语法很容易。但在 Objective-C 中,如何实现链式语法呢? 注:这里讨论的...

  • Swift链式调用的安全性

    文中引用到的:SnapKitAlamofireBees 链式语法在开发很常见。iOS上的许多开源库都使用了链式语法...

  • iOS链式语法 & Masonry的实现

    Demo:https://github.com/BaiKunlun/chained-syntax-implemen...

  • 给链式语法泼点冷水

    引言 最近基于block实现的链式语法很火, 不管大牛还是新手, 都搞出好多链式语法的库或者blog介绍。曾经有一...

  • iOS链式函数式响应式编程

    iOS链式,函数式,响应式编程 block表达式语法: 作为函数参数的语法 定义block简写 作为返回值的语法 ...

  • Masonry原理与链式编程

    在iOS开发中,Masonry是我们常用的一个轻量级的布局框架,它以链式语法的形式优雅的实现了自动布局。下面我们以...

  • ios block 实现点语法、链式编程

    相信用过masonry的童鞋,一定被它的魅力折服,真的很好用啊。masnory是用链式编程的思想来写的,用起来一个...

  • OC实现链式语法

    1.什么是链式语法 简单的是说就是可以通过OC的点语法去调用方法甚至是连续调用多个方法,虽然OC本来可以通过点语法...

网友评论

    本文标题:iOS链式语法的实现

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