美文网首页
链式语法

链式语法

作者: FM_0138 | 来源:发表于2019-04-16 15:04 被阅读0次

谈到链式编程,那Masonry几乎就是最经典的代表:

make.top.equalTo(self.view).offset(60)

像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便

1.传统写法,两个方法需要单独调用,也不能任意组合顺序

创建Person类

Person.h:

- (void)eat1;

- (void)sleep1;

Person.m:

- (void)eat1{

    NSLog(@"%s", __FUNCTION__);

}

- (void)sleep1{

    NSLog(@"%s", __FUNCTION__);

}

控制器中调用Person类中方法

ViewController.m:

Person *person = [[Person alloc] init];

[person eat1];

[person sleep1];

2.用’[]’实现连续调用

Person.h:

- (Person*)eat2;

- (Person*)sleep2;

Person.m:

- (Person*)eat2{

    NSLog(@"%s", __FUNCTION__);

    return self;

}

- (Person*)sleep2{

    NSLog(@"%s", __FUNCTION__);

    return self;

}

ViewController.m:

[[person eat2] sleep2];

[[person sleep2] eat2];

3.用block实现链式

 //person.eat3相当于get方法(很妙的自己可以试一下)

Person.h:

-(void(^)(void))eat3;

- (void(^)(void))sleep3;

Person.m:

-(void(^)(void))eat3{

    void(^eat3Block)(void) = ^ {

        NSLog(@"%s",__FUNCTION__);

    };

    returneat3Block;

}

- (void(^)(void))sleep3{

    void(^sleep3Block)(void) = ^ {

        NSLog(@"%s",__FUNCTION__);

    };

    returnsleep3Block;

}

ViewController.m:

person.eat3();

person.sleep3();

4.实现 链式(无参)

Person.h:

-(Person* (^)(void))eat4;

- (Person* (^)(void))sleep4;

Person.m:

- (Person*_Nonnull(^)(void))eat4{

    Person* (^eat4Block)(void) = ^ {

        NSLog(@"%s",__FUNCTION__);

        return self;

    };

    returneat4Block;

}

//上下两种写法一样

- (Person*_Nonnull(^)(void))sleep4{

    return ^ {

        NSLog(@"%s",__FUNCTION__);

        return self;

    };

}

ViewController.m:

person.eat4().sleep4();

person.sleep4().eat4();

5.实现 链式(带参)

//person.eat3相当于get方法(很妙的自己可以试一下) 返回值是block  调用block需要传参数 int  调用block返回值是对象本身

Person.h:

- (Person * (^)(NSString *foodName))eat5;

- (Person * (^)(NSInteger hour))sleep5;

Person.m:

- (Person *(^)(NSString *))eat5

{

    Person * (^eat5Block)() = ^(NSString *foodName) {

        NSLog(@"吃: %@",foodName);

        return self;

    };

    return eat5Block;

}

//上下两种写法一样

- (Person *(^)(NSInteger))sleep5

{

    return ^(NSInteger hour) {

        NSLog(@"睡了%ld小时",(long)hour);

        return self;

    };

}

ViewController.m:

person.eat5(@"蛋糕").sleep5(8);

person.sleep5(8).eat5(@"面包");

原文:https://www.cnblogs.com/junhuawang/p/7345620.html

相关文章

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

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

  • 第一篇:链式语法实现分析

    引言 第三方自动布局框架 Masonry 的出现,是链式语法的鼻祖,也让我们见识到链式语法的魅力! 那么链式语法是...

  • 链式语法学习

    为什么要写一个链式语法的库 最近看了 JHChainableAnimations 和 Masonry 觉得链式语法...

  • Underscore.js 源码解读之链式语法

    链式语法写法 我们调用多个 Underscore 的方法。可能会这么写: 用 Underscore 的链式语法来简...

  • Objective-C 链式编程简单实现

    链式编程 链式编程,其实就是通过.点语法将多行代码链接成一句代码,书写简洁、可读性好,但代码语法苦涩难懂。关于链式...

  • 链式语法

    masonry里面自动布局使用的.top().bottom();就是链式语法 (BaseViewControlle...

  • 链式语法

    谈到链式编程,那Masonry几乎就是最经典的代表: make.top.equalTo(self.view).of...

  • Swift链式调用的安全性

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

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

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

  • 利用block实现简单链式语法

    接触到Masonry这一框架后 被它内部简洁明了的链式语法所惊艳到 瞬间链式语法就像神奇的魔法棒 通过一行链式语...

网友评论

      本文标题:链式语法

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