0
点赞
收藏
分享

微信扫一扫

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 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;
}
}];


举报

相关推荐

0 条评论