美文网首页
22.链式编程和函数式编程

22.链式编程和函数式编程

作者: 小笨憨 | 来源:发表于2017-07-13 17:29 被阅读0次

链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好

链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

代表:Masonry框架。

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

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

像这样equalTo(self.view)
通过’()’去调用函数,一般调用完返回的还是这个对象本身,就是函数式编程.

函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。

函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

代表:ReactiveCocoa。

函数式编程

1. 如果想再去调用别的方法,那么就需要返回一个对象;
2. 如果想用()去执行,那么需要返回一个block;
3. 如果想让返回的block再调用对象的方法,那么这个block就需要返回一个对象(即返回值为一个对象的block)。

用’[]’实现连续调用

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];

用’()”实现函数式编程,用block实现

Person.h:

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

Person.m:

- (void (^)())eat3
{
    //定义block
    void (^eat3Block)() = ^ {
        NSLog(@"%s",__FUNCTION__);
    };
    return eatBlock;
}
- (void (^)())sleep3
{
    return ^ {
        NSLog(@"%s",__FUNCTION__);
    };;
}

ViewController.m:

person.eat3();
person.sleep3();

实现函数式 + 链式(无参)

Person.h:

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

Person.m:

- (Person *(^)())eat4
{
    Person * (^eat4Block)() = ^ {
        NSLog(@"%s",__FUNCTION__);
        return self;
    };
    return eat4Block;
}
//上下两种写法一样
- (Person *(^)())sleep4
{
    return ^ {
        NSLog(@"%s",__FUNCTION__);
        return self;
    };
}

ViewController.m:

person.eat4().sleep4();
person.sleep4().eat4();

实现函数式 + 链式(带参)

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(@"面包");

相关文章

  • iOS-链式编程

    函数式编程------->链式编程 函数式编程: 调用方式 我们最终目的是将函数式编程转换为链式编程:首先将调用方...

  • iOS链式编程及函数式编程

    提到链式编程和函数式编程,最典型的代表是Masonry 比较完美的实现了函数式编程和链式编程。例如 ``` [vi...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

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

    原文编程思想-iOS链式、函数式和响应式编程 在了解链式、函数式和响应式编程前,我们需要回顾下Block,它在下面...

  • ReactiveObjC入门

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

  • 22.链式编程和函数式编程

    链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好 链式编程特点:方法的返...

  • 工作iOS技术总结

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

  • OC中链式编程和函数式编程

    最近看到了链式编程和函数式编程这两个概念,这两天不是那么的忙 所以也研究了下这两个概念;在查询链式编程和函数式编程...

  • 链式编程与函数编程

    1. 链式编程 2. 函数式编程 例子:

  • iOS-Main-链式编程和函数式编程体验

    Masonry 经典的代表链式编程和函数式编程 思考,怎么样创建一个自己的函数式或链式编程呢? 创建项目,并搞一个...

网友评论

      本文标题:22.链式编程和函数式编程

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