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];
方法名如下:
//如果要实现函数式编程,需要返回‘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
可以接参数
- (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.阅读其他人的框架
*/
- (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.阅读其他人的框架
*/
相关文章推荐
- ios-链式编程、函数式编程以及响应式编程
- 一步一步教你理解和实现iOS中的链式编程和函数式编程
- iOS中函数式编程和链式编程的应用
- iOS 链式编程与函数式编程
- 响应式编程、函数式编程、链式调用
- 李洪强iOS开发之函数式 编程初窥
- iOS开发技巧系列---使用链式编程和Block来实现UIAlertView
- iOS_链式编程学习
- IOS学习笔记2-NSThread,链式编程
- iOS链式编程
- iOS链式编程框架介绍之LinkBlock
- 实现iOS中的链式编程
- iOS 利用Block实现链式编程
- 理解iOS与函数式编程
- iOS 链式编程
- 链式编程,iOS简单封装属性字符串,实现富文本.
- iOS 链式编程思想
- iOS利用block实现链式编程方法(Objective-C链式编程)
- iOS中的链式编程
- iOS利用block实现链式编程方法(Objective-C链式编程)