您的位置:首页 > 移动开发 > IOS开发

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

2017-02-27 10:42 351 查看
一、首先看Masonry经典的代表性代码块

- (void)masDemo{

    //Masonry经典的代表

    UIView *view = [[UIView
alloc]init];

    view.backgroundColor = [UIColor
cyanColor];

    [self.view
addSubview: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 = [Person
new];(以下省略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实现

方法名如下:

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

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

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

实现方法如下:

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

    NSLog(@"%s",__FUNCTION__);

    Person * (^runBlock)() = ^{

        NSLog(@"跑男");

        return
self;

    };

    return runBlock;

}

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

    NSLog(@"%s",__FUNCTION__);

    return ^{

        NSLog(@"吃2");

        return
self;

    };

}

在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);

        return
self;

    };

}

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

    return ^(double distance){

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

        return
self;

    };

}

方法的调用如下

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

/*

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

  1.自己封装框架

  2.阅读其他人的框架

 */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息