OC坑集: block作为函数参数
2015-06-06 11:02
387 查看
对于 OC 的争论一直不休, 对于一门语言, 我觉得只要能解决你的问题就够了.
评论一门编程语言之前, 你需要真正的去用它, OC 孰好孰坏, 需要你自己去尝试.
OC 坑集, 主要记载使用 OC 开发项目遇到的问题, 尽量简洁明了, 希望大家喜欢.
block 语句块可以作为函数的参数, 在项目中都经常被作为回调来使用.
如果你还不熟悉 block 语法, 请自行 google.
这里不讲 block 语法.
创建一个 OC 类
实现如下
在 main.m 里面调用
大家看到这里,应该觉得没什么问题.
我刚开始也是行事冲冲的,但是编译器给了 Error, 意思是参数丢失.
经过一番挣扎, 终于解决了问题.
在声明带有 block 语句的方法时, 需要带上参数名称或者调用者自己写上参数名称.
重新调用
使用 block 作为函数参数的时候,建议使用 typedef 定义 block.
定义和实现
测试和使用
评论一门编程语言之前, 你需要真正的去用它, OC 孰好孰坏, 需要你自己去尝试.
OC 坑集, 主要记载使用 OC 开发项目遇到的问题, 尽量简洁明了, 希望大家喜欢.
block 语句块可以作为函数的参数, 在项目中都经常被作为回调来使用.
如果你还不熟悉 block 语法, 请自行 google.
这里不讲 block 语法.
创建一个 OC 类
#import <Foundation/Foundation.h> @interface FoolBar : NSObject - (void)makeFool:(void(^)(NSString *))callback; @end
实现如下
#import "FoolBar.h" @implementation FoolBar - (void)makeFool:(void (^)(NSString *))callback { NSLog(@"makeFool | callback."); callback(@"This is a block parameter."); } @end
在 main.m 里面调用
#import <Foundation/Foundation.h> #import "FoolBar.h" int main(int argc, const char * argv[]) { @autoreleasepool { FoolBar *fb = [[FoolBar alloc] init]; [fb makeFool:^(NSString *) { }]; } return 0; }
大家看到这里,应该觉得没什么问题.
我刚开始也是行事冲冲的,但是编译器给了 Error, 意思是参数丢失.
经过一番挣扎, 终于解决了问题.
在声明带有 block 语句的方法时, 需要带上参数名称或者调用者自己写上参数名称.
- (void)makeFool:(void(^)(NSString *param))callback;
重新调用
#import <Foundation/Foundation.h> #import "FoolBar.h" int main(int argc, const char * argv[]) { @autoreleasepool { FoolBar *fb = [[FoolBar alloc] init]; [fb makeFool:^(NSString *param) { NSLog(@"param = %@", param); }]; } return 0; }
使用 block 作为函数参数的时候,建议使用 typedef 定义 block.
typedef void (^OnFoolCallback)(NSString *name);
定义和实现
- (void)productFool:(OnFoolCallback)callback;
- (void)productFool:(OnFoolCallback)callback { NSLog(@"productFool | callback."); callback(@"This is a block parameter: mark."); }
测试和使用
#import <Foundation/Foundation.h> #import "FoolBar.h" int main(int argc, const char * argv[]) { @autoreleasepool { FoolBar *fb = [[FoolBar alloc] init]; [fb makeFool:^(NSString *param) { NSLog(@"param = %@", param); }]; [fb productFool:^(NSString *name) { NSLog(@"name = %@", name); }]; } return 0; }
相关文章推荐
- java常用软件
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
- AMPCamp2015之SparkStreaming wordCount
- MapReduce(十五): 从HDFS阅读本文的源代码分析
- Codeforces Round #306 (Div. 2)
- python - re (正则表达式的学习)
- 【转】3.3.1 交叉编译内核设置
- 尾递归(转)
- 黑马程序员----java7新特性之自动关闭资源
- 更改linux文件的拥有者及用户组(chown和chgrp)
- JavaScript中操作字符串之localeCompare()方法的使用
- HTML 字符实体 < >: &等
- 结构体+数组
- 杭电 HDU ACM Milk
- 一名C++程序员的成长之路
- div自适应屏幕
- MySQL数据库性能优化之一
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)(转)
- 程序员技能层次模型
- Web分析日志分析2