首页 > 系统 > iOS > 正文

iOS中的函数式编程和链式编程

2019-11-06 10:04:47
字体:
来源:转载
供稿:网友

一、首先看Masonry经典的代表性代码块

- (void)masDemo{

    //Masonry经典的代表

    UIView *view = [[UIViewalloc]init];

    view.backgroundColor = [UIColorcyanColor];

    [self.viewaddSubview:view];

    [view mas_makeConstraints:^(MASConstraintMaker *make) {

        //1.函数式编程:通过‘()’去调用函数,一般调用完返回的对象还是这个对象本身,就是函数式编程。

        //equalTo(...).offset(...)...().()

        //2.链式编程:通过‘点’语法,将需要执行的代码块连续的书写下去的,就是链式编程。

        //equalTo(self.view).offset(40)...

        make.top.equalTo(self.view).offset(40);

        make.size.mas_offset(CGSizeMake(100,100));

        make.centerX.equalTo(self.view).offset(-40);

    }];

}

二、函数调用的传统写法,两个方法单独调用,也不能随意的组合顺序。

@interface Person :NSObject

- (void)running;

- (void)eatSomething;

@end

@implementation Person

- (void)running{

    NSLog(@"%s",__FUNCTION__);

}

- (void)eatSomething{

    NSLog(@"%s",__FUNCTION__);

}

@end

   在ViewController调用Person类的时候

    Person *person = [Personnew];(以下省略Person对象的创建)

    [person running];

    [person eatSomething];

三、用‘[]’实现连续调用。runn和eat两个方法如下:

- (Person *)runn;

- (Person *)eat;

此时方法实现中需要返回的是两个对象本身

- (Person *)runn{

    NSLog(@"%s",__FUNCTION__);

   return self;

}

- (Person *)eat{

    NSLog(@"%s",__FUNCTION__);

    return self;

}

在调用的时候,需要使用‘[]’连续调用,此方法为链式编程

   1‘  id obj1 = [person runn]; 

    [obj1 eat];

    id obj2 = [person eat];

    [obj2 runn];

  

    2’   [[person runn]eat];

四、用‘( )’实现函数式编程+ ‘ . ’形成链式编程(无参),用block实现

方法名如下:

//如果要实现函数式编程,需要返回‘block’

- (Person * (^)())runn2;

- (Person *(^)())eat2;

实现方法如下:

- (Person * (^)())runn2{

    NSLog(@"%s",__FUNCTION__);

    Person * (^runBlock)() = ^{

        NSLog(@"跑男");

        returnself;

    };

    return runBlock;

}

- (Person * (^)())eat2{

    NSLog(@"%s",__FUNCTION__);

    return ^{

        NSLog(@"吃2");

        returnself;

    };

}

在ViewController调用如下

person.runn2().runn2().eat2().eat2();

五、用‘( )’实现函数式编程 + ‘ . ’形成链式编程(带参),用block实现

方法名如下

//返回block可以接参数

- (Person *(^)(NSString *food))eat3;

- (Person *(^)(double distance))run3;

方法的实现如下

- (Person *(^)(NSString *))eat3{

    return ^(NSString *food){

        NSLog(@"吃3%@",food);

        returnself;

    };

}

- (Person *(^)(double))run3{

    return ^(double distance){

        NSLog(@"跑3 %lf",distance);

        returnself;

    };

}

方法的调用如下

person.run3(1000).eat3(@"water").run3(10000).eat3(@"wind");

/*

 关于链式编程和函数式编程的进一步理解

  1.自己封装框架

  2.阅读其他人的框架

 */


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表