iOS开发学习48 OC的lambda block
Posted 编程圈子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发学习48 OC的lambda block相关的知识,希望对你有一定的参考价值。
ios开发学习48 lambda表达式
一、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 code
NSString* 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;
];
以上是关于iOS开发学习48 OC的lambda block的主要内容,如果未能解决你的问题,请参考以下文章