iOS 利用Block实现链式编程
2015-02-10 18:46
363 查看
1. 传统编程
// Person的方法- (void)eat
{
NSLog(@"吃饭");
}
- (void)learn
{
NSLog(@"学习");
}
- (void)play
{
NSLog(@"娱乐");
}
// 连续做事情
Person *p = [ [Person alloc] init ];
[p eat];
[p learn];
[p play];
2. 不用Block,实现链式编程
// Person的方法- (Person *)eat
{
NSLog(@"吃饭");
return self;
}
- (Person *)learn
{
NSLog(@"学习");
return self;
}
- (Person *)play
{
NSLog(@"娱乐");
return self;
}
// 连续做事情,这么写看得眼花
Person *p = [ [Person alloc] init ];
[[[p eat] learn] play];
3. 利用Block实现链式编程
// Person的方法- ( Person *(^)() )eat
{
return ^{
NSLog(@"吃饭");
return self;
};
}
- ( Person *(^)() )learn
{
return ^{
NSLog(@"学习");
return self;
};
}
- ( Person *(^)() )play
{
return ^{
NSLog(@"娱乐");
return self;
};
}
// 连续做事情
Person *p = [ [Person alloc] init ];
p.eat().learn().play();
4. 带参数的链式编程
比如人的吃饭方法,参数是 NSString *food- ( Person *(^)() )eat:(NSString*) food
{
return ^(food){
NSLog(@"吃饭);
return self;
};
}
如果是上面这种写法:p.eat后面不能跟 :food, 因为p.eat本身就等同于[ p eat:(NSString *)food ],如果写p.eat:food ,相当于 [p eat::food],这样是不对的.
所以正确的写法:- ( Person *(^)( NSString* food ) )eat
{
return ^( NSString* food ){
NSLog(@"吃饭---- %@",food);
return self;
};
}
// 连续做事情
p.eat(@"白菜").learn().play();
5. 总结,用Block实现链式编程无非就是:方法的返回值是一个Block,Block内部装着真正要执行的方法,Block内部再返回self;
如果有参数,通过Block的参数往里传.
- ( 返回值是Block ) 方法名{
return *{
Block内部装着真正要执行的代码
return self;
};
}
相关文章推荐
- iOS利用block实现链式编程方法(Objective-C链式编程)
- iOS利用block实现链式编程方法(Objective-C链式编程)
- (一一八)利用block实现链式编程
- objc利用block实现链式编程方法
- objc利用block实现链式编程方法
- iOS开发技巧系列---使用链式编程和Block来实现UIAlertView
- (一一八)利用block实现链式编程
- AJ学IOS 之BLOCK的妙用_利用block实现链式编程
- ios利用block实现回调示例
- 一步一步教你理解和实现iOS中的链式编程和函数式编程
- iOS 使用block实现链式语法的解析(类似Masonry)
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(四) Block的实现
- iOS开发之利用链式编程和贝瑟尔曲线来画图
- iOS链式编程框架介绍之LinkBlock
- 第四十三篇:iOS链式编程Block
- iOS链式编程框架介绍之LinkBlock(iOS链式编程)
- 【iOS】利用block实现回调的示例
- 链式编程,iOS简单封装属性字符串,实现富文本.
- iOS:Block 编程2--实现探究
- 实现iOS中的链式编程