博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C基础10 :代码块
阅读量:5162 次
发布时间:2019-06-13

本文共 1321 字,大约阅读时间需要 4 分钟。

代码块是对函数的一种扩展,但是比c语言中的函数指针高级多了。

1.声明和定义。returnType (^blockName)(list of arg) = ^returnType(list of arg){body;};

其中右边的returnType可以省略,因为编译器可以通过代码块的声明来推断函数的返回值;如果代码块没有参数右边的list of arg也可以省略。

 int (^square)(int number) = ^int(int number){ return number * number;}; //没有省略返回值

 int (^square)(int number) = ^(int number){return number * number;}; //省略返回值

void (^theBlock)() = ^{ printf("Hello Blocks!\n"); };//最简单的形式,没有返回值和参数列表

2.如何使用代码块。

1)可以像函数一样直接调用,并且代码块可以访问跟它作用域一样的局部变量。

int value = 6; int (^multiply_block)(int number) =  ^(int number) {return (value * number);}; int result = multiply_block(7); printf("Result = %d\n", result);

 2)可以在需要需要传递函数作为参数的地方使用代码块。

NSArray *array = [NSArray arrayWithObjects:@"Amir", @"Mishal", @"Irrum", @"Adam", nil];        NSLog(@"Unsorted Array %@", array);        NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *object1, NSString *object2) {            return [object1 compare:object2];        }];        NSLog(@"Sorted Array %@", sortedArray);

 3)代码块可以跟函数指针一样使用typedef 。

typedef double (^MKSampleMultiply2BlockRef)(double c, double d);int main(int argc, const char * argv[]){    MKSampleMultiply2BlockRef multiply2 = ^(double c, double d) { return c * d; };    printf("%f, %f", multiply2(4, 5), multiply2(5, 2));    return 0;}

 

转载于:https://www.cnblogs.com/52xpz/p/4280694.html

你可能感兴趣的文章
ubuntu的home目录下,Desktop等目录消失不见
查看>>
建立,查询二叉树 hdu 5444
查看>>
[Spring框架]Spring 事务管理基础入门总结.
查看>>
2017.3.24上午
查看>>
Python-常用模块及简单的案列
查看>>
LeetCode 159. Longest Substring with At Most Two Distinct Characters
查看>>
LeetCode Ones and Zeroes
查看>>
基本算法概论
查看>>
jquery动态移除/增加onclick属性详解
查看>>
JavaScript---Promise
查看>>
暖暖的感动
查看>>
Java中的日期和时间
查看>>
Django基于admin的stark组件创建(一)
查看>>
抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
查看>>
C. Tanya and Toys_模拟
查看>>
springboot jar包运行中获取资源文件
查看>>
基于FPGA实现的高速串行交换模块实现方法研究
查看>>
Java Scala获取所有注解的类信息
查看>>
delphi ,安装插件
查看>>
case when then的用法-leetcode交换工资
查看>>