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

释放双眼,带上耳机,听听看~!

一、首先看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__);

   returnself;

}

- (Person *)eat{

    NSLog(@"%s",__FUNCTION__);

    returnself;

}

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

   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.阅读其他人的框架

 */

 

 

 

人已赞赏
iOS文章

iOS统计某个工程所有的代码行数

2020-2-29 16:04:24

iOS文章

iOS友盟分享报错_OBJC_CLASS_$_QQApiImageArrayForQZoneObject

2020-2-29 16:08:43

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索