Block块使用

block

// 基本用法一:1.定义无参数无返回值的Block代码块

// void:无返回值 ():无参数

void (^printBlock)() = ^() {

NSLog(@"这是无参数无返回值的Block块");

};

// 调用该无参数无返回值的Block块

printBlock();

// 基本用法二:2.定义有参数无返回值的Block代码块

// (int):数据类型  ^(int num):有参数,且数据类型也要有

void (^printNumBlock)(int) = ^(int num) {

NSLog(@"这是有参数无返回值的Block块, 传入的参数是:%d", num);

};

// 调用该有参数无返回值的Block块

printNumBlock(10);

// 基本用法三:3.定义有参数有返回值的Block代码块

// int:有返回值,返回数据类型为int的值,⚠️不要加括号

// ^(int num):有参数,且数据类型也要有

int (^printCountBlock) (int) = ^(int num) {

NSLog(@"这是有参数有返回值的Block块,传入的参数是:%d", num);

return num * 9;

};

// 调用该有参数有返回值的Block块

int consequence = printCountBlock(8);

NSLog(@"这是有参数有返回值的Block块,返回的值是:%d", consequence);


为什么用block? 和函数有很多相似之处,但是绝对绝对不是函数。

^{

语句体;

};

PS: // myblock是block类型的变量

void (^myblock)() = ^{

NSLog(@"Hello, World!");

};

// 调用myblock函数

myblock();

函数是不允许嵌套定义的,也就是不允许在函数的定义里再去定义一个函数。

block可以在函数的定义里定义。

int(^mathBlock)(int x,int y);  mathBlock 是block类型的变量

typedef  int(^mathBlock)(int x,int y);  而现在mathBlock类型的别名是.block类型 int(^)(int x,int y);

typedef 的使用

1.int count;  count是整形类型的变量

2.typedef int count;  count是整形类型的别名。

3.count i; 那么i就是count类型的,也就是int类型的。

1.int(*math_t)(int, int);

math_t是什么? 是指向指针类型的变量 ,存放的是地址。函数的名字就是函数的入口地址.

2. typedef int(*math_t)(int, int);

3. math_t mt; mt是什么?变量。指针类型的变量。访问这个变量内容里的内容的时候,访问方式是函数类型。

PS: // 第二个有参block的使用

// typedef的使用 此时mathBlock类型的别名是.block类型 int(^)(int x,int y);

typedef int(^mathBlock)(int x,int y);

mathBlock mt;

mt = ^(int x, int y){

return x + y;

};

// 调用有参mathBlock函数

int result = mt(3, 5);

NSLog(@"result = x+y = %d", result);

block语句块可以访问可以访问block外局部变量,但是只能读取不能写; 如果想写入,需要在变量声明的前边加上__block声明。

int var_a = 20;

__block int var_b = 30;

block可以作为返回值类型

在主函数里: // 第三种

int a = 3; int b = 5;

int result2;

int mta;

TRMath *t = [[TRMath alloc] init];

// 调用process方法

mta = [t process:^int(int x, int y) {

return x + y;

} withInt:b otherInt:a];

result2 = [t process:^int(int x, int y) {

return x - y;

} withInt:b otherInt:a];

NSLog(@"a + b = %d", mta);

NSLog(@"b - a = %d", result2);

// 第四种

TRPerson *tp = [[TRPerson alloc] init];

// 调用getBlock方法

TRBlock bloc = [tp getBlock];

bloc();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 01-常量与变量 学习swift第一步打印Hello World print("Hello World") swi...
    iOS_恒仔阅读 5,297评论 2 19
  • 一、Block的简单介绍 Block 就是匿名函数 它是封装了一个代码块,这个代码块在什么时候都可以执行; 使用B...
    5c7a7cf606fc阅读 541评论 0 0
  • Blocks编程要点 目录 简介............................................
    xuejunjun阅读 1,327评论 0 5
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,339评论 3 25
  • 在小学阶段,五年级已经属于高年级。所以我就理所当然的以为五年级的学生已经比较成熟。直到这次见习,才发现自己原来的想...
    偏執l阅读 1,664评论 0 1