50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > iOS开发学习48 OC的lambda block

iOS开发学习48 OC的lambda block

时间:2022-05-10 22:56:57

相关推荐

iOS开发学习48 OC的lambda block

iOS开发学习48 lambda表达式

一、block 简介二、block使用1. block的写法大概就是这样:2. 带参数的话可以这样写:3. 如果不写入参,可以写:4. 当然返回也可以省略,不过编译器可能会有警告:5. 定义一个block的变量:6. block就可以作为另一个函数的参数7. block 作为类的属性(使用typedef)在头文件中定义在m文件中调用:其它类使用该属性8. 类的方法里使用block头文件m文件三、OC自带的使用block的API示例遍历元素

一、block 简介

Block是苹果在ObjectC为C、C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包。

block不需要写protocol、函数等、注重结果的传输,写法比委托简便。

block的声明:

<返回值类型> + (^<block名字>) + (<参数类型1>, <参数类型2>...)

二、block使用

1. block的写法大概就是这样:

void (^blockTest)(void) = ^{NSLog(@"block");};blockTest();

2. 带参数的话可以这样写:

^ BOOL (int left, int right){return a > b;}

3. 如果不写入参,可以写:

(void)^{NSLog(@"block的使用");};

4. 当然返回也可以省略,不过编译器可能会有警告:

^{NSLog(@"最简捷的block的使用");};

5. 定义一个block的变量:

void (^blockWithParm)(int parm) = ^(int count){NSLog(@"有参无返回值的定义和使用:%d", count);};blockWithParm(100);

6. block就可以作为另一个函数的参数

void a(){void (^block)(int parm) = ^(int count){NSLog(@"有参无返回值的定义和使用:%d", count);};// 把block 传到funcWithParm里作为参数funcWithParm(block);}void funcWithParm(void (^block)(int parm)){block(10);}

7. block 作为类的属性(使用typedef)

在头文件中定义

typedef void (^blockTest)(); @property (nonatomic,copy) blockTest myblock;

在m文件中调用:

if(_myblock){_myblock();}

其它类使用该属性

_testClass.myblock = ^{NSLog(@"block");}

8. 类的方法里使用block

头文件

+(void) myfunc:(int)someParam myBlock:(nonnull void(^)(NSString* _Nonnull))myBlock;

m文件

+(void) myfunc:(int someParam myBlock:(nonnull void(^)(NSString* _Nonnull))myBlock{... some codeNSString* ret = @"return value";myBlock(ret);}

三、OC自带的使用block的API示例

遍历元素

NSArray *arrChar=[@"A/B/C/D/E/F" componentsSeparatedByString:@"/"];//遍历元素[arrChar enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {NSLog(@"\nindex:[%d], value:[%@]",idx,obj);if(idx == 4){*stop=YES;}}];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。