iOS 函数式编程

在介绍函数式编程之前,大家先了解下在平常工作中,我们那些地方使用了函数式编程,以及使用函数编程有哪些好处.

对JavaScript进行封装了的jQuery就是函数式编程的经典之作

$("p").css("background-color");

iOS 中Masonry第三方约束也是使用了函数式编程的思想

make.centerY.equalTo(self.view).offset(100);

我们先分析一下,这样写,有什么好处

  • 把某一个设置进行模块化,每一个 "." 之后都代表着一个功能的添加(看上去,条理清晰)
  • 在添加和取出某一功能模块更加容易,只需要删除 "." 之后的那一功能即可

是不是感觉好厉害!!!

那么iOS 要想实现这样的编程方式,我们需要了解什么呢?

  • 其实每一个功能模块,都有一个返回值,而且实现函数式编程的重点就是这个返回值,自始至终,连接这些功能块就是这个返回值

是不是有点明白?

举个例子:

@interface Person : NSObject
- (void)eat;
- (void)run;
@end
@implementation Person
- (void)eat{
    NSLog(@"吃饭");
}
- (void)run{
    NSLog(@"跑步");
}
@end
Person *person = [[Person alloc] init];
[person eat];
[person run];

是不是很熟悉,要是不熟悉的话,请洗洗睡吧

eat 和 run 算不算是两个功能点?,是不是都是这个人在做?

上面说了, 函数式编程的主线就是那个返回值

改:

@interface Person : NSObject
- (Person *)eat;
- (Person *)run;
@end
@implementation Person
- (Person *)eat{
    NSLog(@"吃饭");
    return self;
}
- (Person *)run{
    NSLog(@"跑步");
    return self;
}
@end
Person *person = [[Person alloc] init];
[[person eat] run];

哎呀! 是不是有点感觉了

继续改:

@interface Person : NSObject
- (Person *(^)())eat;
- (Person *(^)())run;
@end
@implementation Person
- (Person *(^)())eat{
    return  ^Person *(){
        NSLog(@"吃饭");
        return self;
    };
}
- (Person *(^)())run{
    Person *(^block)() = ^(){
        NSLog(@"跑步");
        return self;
    };
    return block;
}
@end
Person *person = [[Person alloc] init];
person.run().eat();

哦,是不是很简单,这个时候每次返回的是一个block块

你可能感兴趣的:(iOS 函数式编程)