iOS APP 开发 OC 第十天,block

tags: OC 30 day

有哪些是数据类型?

int,double,float,char ...
既然是一个数据类型那麽就可以声明这个数据类型的变量。所以block完全也可以声明一个block类型的变量。
不同类型的变量中可以储存不同类型的数据。

Block 是数据类型

那麽block类型的变量中可以储存什麽样的数据呢?

  1. block 是一个数据类型,所以我们可以声明一个block类型的变量。
  2. block 类型的变量中专们储存一段代码,这段代码可以有参数也可以有反回值。

block 变量的声明

  1. 虽然block变量中是用来储存一段代码,但是一个block变量中并不是任意一段代码都可以存进去的是有限定的。也就是说,再声明block变量储存的代码段是否有参数,是否有反回值。一但指定以後,这个block变量中就只能储存这样的代码了。

声明一个block变量,反回值是void,参数是一个int类型的。
这个时候,这个block变量中就只能储存无反回值并且有一个int参数的代码>段。

声明block变量的语法格式:

反回值类型 (^block变量的名称)(参数列表);
void (^myBlock1)(); 
//表示声明了一个block类型的变量叫做myBlock1
// 这个变量只能储存没有反回值没有参数的代码段。

注意:

声明block变量的时候要指定这个block变量可以储存的代码段的反回值和参数描述,一但指定,这个block变量就只能储存这样的代码段了,其他格式的代码段无法储存。

初始化block变量

  1. 原理: 写一段符合block要求的代码段,储存到变量就可以了。
  2. 代码段的书写格式:
^反回值类型(参数列表){
代码段;
};
  1. 写一段无参数无反回值的代码段:
^void(){
NSLog(@"喵呜");
};

这个时候,我们就可以将这段代码使用赋值符号储存到无反回值无参数要求的block变量中,当然也可以再声明block变量同时使用符合要求的代码段初始化。

void (^myBlock1)(); 
myBlock1 = ^void(){
NSLog(@"喵呜");
};

有返回值的代码段

^int(){
    int num1 = 10 + 20;
    return num1;
};

我们就可以将这段代码复职给符合要求的block变量。

int (^myblock2)() = ^int(){
    int num1 = 10 + 20;
    return num1;
};

有参数有返回值的代码段

^int(^myblock3)(int num1,int num2){
int num3 = num1 + num2;
return num3;
};

所以我们可以将这段代码赋值给符合要求的block变量。

^int(^myblock3)(int num1,int num2) = ^int(int num1,int num2){
int num3 = num1 + num2;
return num3;
};

注意

赋值给block变量的代码必须要符合block变量的要求。否则会报错。

如何执行储存在block变量中的代码段?

语法格式:

block变量名();

有参数就传参数,有反回值就接。


<<:  CSS - Tailwind CSS 阿哩阿杂的设定

>>:  在 header 带 token 的 Guzzle Http Request 模板

Kotlin Android 第10天,从 0 到 ML - Kotlin 与 Java 互动操作

前言: 虽然kotlin 为android 官方首选语言,新专案大都也是用kotlin ,但是免不了...

【PHP Telegram Bot】Day07 - 安装 VS Code 并撰写第一支程序

俗话说得好:「工欲善其事,必先利其器」。 没有一个好用的文字编辑器,要如何轻松愉悦的写程序呢? 安...

Day 22 Android Unit Test

今年的疫情蛮严重的,希望大家都过得安好, 希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标...

Day 2 [Python ML] 基础资料处理

前言 在这系列文章中,我会使用Azure来运行所有的程序,如何使用Azure的文章在这里 这边则是使...