OC坑集: block作为函数参数
来源:互联网 发布:动画软件flash下载 编辑:程序博客网 时间:2024/05/16 15:00
对于 OC 的争论一直不休, 对于一门语言, 我觉得只要能解决你的问题就够了.
评论一门编程语言之前, 你需要真正的去用它, 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;}
2 0
- OC坑集: block作为函数参数
- OC坑集: block作为函数参数
- OC 重点block-------3-------block如何作为函数的参数
- OC 重点block-------5-------block作为函数的返回值
- 094.Block Argument 块作为函数参数
- 094.Block Argument 块作为函数参数
- Objective-c - block作为函数的参数
- iOS中block作为一个函数的参数
- 【Objective-C】02-OC对象作为参数传递给函数
- ios-block的作为参数
- 最简单的IOS Block与协议 block作为函数参数的使用
- Objective-c - block作为方法的参数
- objective-C block作为参数使用
- Block作为属性、方法参数、返回值
- 指针作为函数参数
- 数组作为函数参数
- 函数作为参数
- 指针作为函数参数
- LeetCode | Longest Substring Without Repeating Characters
- .net 事务
- path_sum
- Android25图灵聊天项目------适配器选择界面展示数据
- 【Thinking in Java笔记】Java中判断使用继承还是组合
- OC坑集: block作为函数参数
- Codeforces Round #306 (Div. 2)_B
- 关于ubuntu12.04下firefliy的架设
- Hive介绍
- 说说这些年做的云计算和大数据项目
- 触摸 touches targetTouches changedTouches 区别
- ArcGIS For JavaScript API Dynamically create layer list(动态创建图层列表)
- 6月2日新公司到岗
- [java]——深入理线性表与线性链表