标签:
将Block作为代理来使用,实现传值
在这里http://www.cnblogs.com/iCocos/p/4659878.html,笔者已经将代理,Block,通知传值的方式总结了一下,今天使用的不一样,我们这里使用的是在一个方法中将一个block代码保存起来,再回到blcok内部去执行。
1:首先,定义一个blcok
typedef void(^ResultBlock)(CLLocation *currentLoc, CLPlacemark *placemark, NSString *error);
2.声明一个带Block块的方法,方便外面调用并且传入block代码块
1 /** 2 * 获取当前位置 3 * 4 * @param block 获取当前位置后处理的block 5 */ 6 - (void)getCurrentLocation:(ResultBlock)block;
3.在实现文件中定义一个blcok属性,用语纪录后面方法中传入的block,并且执行
// 存储外界传递的代码块 @property (nonatomic, copy) ResultBlock resultBlock;
4.实现Block对应的方法
1 // 获取当前位置 2 - (void)getCurrentLocation:(ResultBlock)block 3 { 4 // 记录代码块 5 self.resultBlock = block; 6 7 8 // 判断是否开启定位服务 9 if ([CLLocationManager locationServicesEnabled]) { 10 // 开始更新用户位置 11 [self.locationM startUpdatingLocation]; 12 } 13 else 14 { 15 self.resultBlock(nil, nil, @"定位服务未开启"); 16 } 17 }
5.在需要执行代码块的位置判断并且执行外部传入的block(这里跟上面提到的文章中的实现时一样的)
if (self.resultBlock) { self.resultBlock([locations lastObject], [placemarks firstObject], nil); }
6,外面使用的时候直接跟使用UIView动画一样,在后面会附加一个blcok,我们只需要在这个blcok里面实现对应的代码,系统会自动将这段代码先保存,再放到blcok内部去执行
1 [[iCocosLocationTool sharediCocosLocationTool] getCurrentLocation:^(CLLocation *currentLoc, CLPlacemark *placemark, NSString *error) { 2 if ([error length] == 0) { 3 NSLog(@"%@ ---- %@", currentLoc, placemark.name); 4 } 5 }];
iOS开发——项目实用技术OC篇&将Block作为代理来使用,实现传值
标签:
原文地址:http://www.cnblogs.com/iCocos/p/4837009.html