iOS 开发成长中心iOS 你不知道的新鲜事iOS 开发每天分享优质文章

iOS 函数式编程

2016-12-16  本文已影响153人  LYSNote

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

对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块

上一篇下一篇

猜你喜欢

热点阅读