块语法 Block 本质上是匿名函数(没有名称函数)
来源:互联网 发布:数据精灵微信版本 编辑:程序博客网 时间:2024/06/09 21:28
/*Block 块语法本质上是匿名函数(没有名称函数) 标准C里面没有匿名函数,在C语言后期版本中加入了匿名函数
在c++、 js、 swift有类似语法,叫做闭包 block和函数指针类似
*/
// ^ 返回值类型(参数名){函数体};返回值类型可以省略
int (^myFirstBlock)(int number) = ^int(int number) {return number * number;};
//block调用 输出 myFirstBlock = 9
NSLog(@"myFirstBlock = %d",myFirstBlock(3));
2.解释语法/* block类型 : int(^) 整型
block形参 : (int number) 一个形参
block变量名 : myFirstBlock
block值 : ^(int number) {return number * number;};
^返回值类型(参数名){函数体};返回值类型可以省略
*/
4种格式
无参 无返回值
无参 有返回值
有参 无返回值
有参 有返回值
3.typedef 关键字返回类型 double block 名字是 MKSampleMultiply2BlackRef(新类型名字)
就如指针定义新类型 传递参数(double c,double d)
*/输出 multiply2 = 20.00
typedefdouble(^MKSampleMultiply2BlackRef)(double c,double d);
MKSampleMultiply2BlackRef multiply2 = ^(double c,double d)
{ return c * d;
};
NSLog(@"multiply2 = %.2f",multiply2(4,5));
4.block语句局部变量在block块中可以访问外部变量局部变量不能改变
float f1 = 3.2;
void (^testBlock)(float) = ^void(float f){
NSLog(@"testBlock = %.2f",f + f1);
};
testBlock(3.14);
f1 = 4.2;
testBlock(3.14);
如果想要修改外部变量 需要在外部变量加上___block修饰
__block int num = 22;
void(^testBlock2)(int) = ^(int x){
num++;
NSLog(@"testBlock2 = %d",num);
};
testBlock2(0);
// 如果想要修改外部变量需要在外部变量加上_block
////全局变量访问 全局变量定义在main函数外面 在block内部可以访问全局变量
在block内部修改全局变量 修改全局变量时不需要__block修饰 而局部变量修改时需要加
5.
block数组排序
/* NSComparisonResult 返回类型 枚举类型的 -1 0 1
NSComparator 经过block块typedef重新定义的名字
(id obj1,id obj2) 参数类型 id类型
*/
NSArray *blockArray = [NSArray arrayWithObjects:@"zhaojiahui",@"zhaoyifen",@"qiaozipeng", nil];
//block方法 排序
NSComparator sortBlock =^NSComparisonResult(id obj1,id obj2){
return [obj1 compare:obj2];
};
// 重新定义新的数组xinArray 去接受排序好的数组
NSArray *xinArray =[blockArray sortedArrayUsingComparator:sortBlock];
NSLog(@"%@",xinArray);
6.stringWithString: 定义一个可变字符串block方法 appendString拼接字符串
NSMutableString *(^MySixthBlock)(NSMutableString *) = ^NSMutableString *(NSMutableString * str){
[str appendString:@"撒由那拉"];
return str;//返回传递过来的字符串 + 撒由那拉
};
//@"苍老师"创建出来的是一个不可变字符串 MySixthBlock([NSMutableString stringWithString:@"苍老师"])可变字符串
NSString *str = MySixthBlock([NSMutableString stringWithString:@"苍老师"]);
NSLog(@"str = %@", str);
输出 str =苍老师撒由那拉
- 块语法 Block 本质上是匿名函数(没有名称函数)
- 【JavaScript】方法属性的匿名函数是匿名函数么(附:获取当前执行函数名称的方法)
- Block Functions块函数
- 块函数Block
- Scala匿名函数语法
- 原创-Block匿名函数简介
- 块-block(语法部分)
- SEL(去除警告)、Block(block深入研究、block回调--匿名函数)
- 巧用匿名函数来解决javascript没有块级作用域的问题
- OC高级特性--Block匿名函数
- (2)语法2:数组、函数、函数一些细节、匿名函数、动态函数
- Objective-C block块与函数指针
- 094.Block Argument 块作为函数参数
- 094.Block Argument 块作为函数参数
- smarty的block function(块函数)
- iOS块语法详解(block编程)
- iOS块语法详解(block编程)
- iOS块语法详解(block编程)
- iOS 保持界面流畅的技巧
- 测试
- 性能测试的几个参数概念
- 利用AXIS2,根据已有WSDL生成java源程序
- UVA 10401Injured Queen Problem (dp)
- 块语法 Block 本质上是匿名函数(没有名称函数)
- 使用POI把数据导出excel表
- Linux Bash Shell快速入门 在线教程
- 【Android工具类】比DES加密更安全的算法——3DES加密算法
- Android View 事件传递机制
- 《Erlang 程序设计》练习答案 -- 第四章 模块与函数
- 【MINA】心跳机制
- java基础知识回顾(二)
- Java初学者不得不知的概念,JDK,JRE,JVM的区别?