函数式编程 我感觉是很装逼的写法
参考原文:http://www.cocoachina.com/ios/20160307/15585.html
像Masonry框架的语法就很装逼
make.right.equalTo(self.right).insets(kPadding);
这种写法 我点赞!
函数式编程总结
-
如果想再去调用别的方法,那么就需要返回一个对象;
-
如果想用()去执行,那么需要返回一个block;
-
如果想让返回的block再调用对象的方法,那么这个block就需要返回一个对象(即返回值为一个对象的block)。
//
// TestObj.h
// reactiveDemo
//
// Created by linpeng on 16/3/10.
// Copyright © 2016年 linpeng. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface TestObj : NSObject
-(TestObj *)wake;
-(TestObj *(^)(NSString *foot))eatLaunch;
-(TestObj *)study;
-(TestObj *(^)(NSString *foot))eatDinner;
-(void(^)())toSleep;
@end
//
// TestObj.m
// reactiveDemo
//
// Created by linpeng on 16/3/10.
// Copyright © 2016年 linpeng. All rights reserved.
//
#import "TestObj.h"
@implementation TestObj
int myEnergy;
-(TestObj *)wake
{
myEnergy = 100;
NSLog(@"起床时间,我的能量:%d",myEnergy);
return self;
}
-(TestObj *(^)(NSString *foot))eatLaunch
{
myEnergy -= 10;
NSLog(@"午饭时间,我的能量:%d",myEnergy);
return ^(NSString *foot){
NSLog(@"==午餐我吃了:%@",foot);
return self;
};
}
-(TestObj *)study
{
myEnergy -= 50;
NSLog(@"学习时间,我的能量:%d",myEnergy);
return self;
}
-(TestObj *(^)(NSString *))eatDinner
{
myEnergy -= 10;
NSLog(@"晚饭时间,我的能量:%d",myEnergy);
return ^(NSString *foot)
{
NSLog(@"==晚餐我吃了:%@",foot);
return self;
};
}
-(void(^)())toSleep
{
myEnergy -= 20;
NSLog(@"睡觉时间,我的能量:%d",myEnergy);
return ^()
{
NSLog(@"==我睡觉了");
};
}
@end
链式结构 我觉得就是一个有序的操作执行(学生起床--》吃午饭--》学习--》吃晚饭---》睡觉)
TestObj *student = [[TestObj alloc] init];
student.wake.eatLaunch(@"馒头").study.eatDinner(@"米饭").toSleep();
看看结果