创建一个 Block

void (^aBlock)(void) = ^{
    NSLog(@"This is a block");
};

这个 block 没有参数和返回值。

调用一个 Block

aBlock(); //This is a block

带参数和返回值的 Blocks
Block 可以带参数和返回值,就像函数和方法一样。

double (^multiplyTwoValues)(double, double) = ^(double firstValue, double secondValue) {
    return firstValue * secondValue;
};
//返回值被推断从 block 内部,也可以明确指定。
multiplyTwoValues = ^ double (double firstValue, double secondValue) {
    return firstValue * secondValue;
};
double result = multiplyTwoValues(2, 3); //result = 6

使用类型定义 Blocks
如果需要定义多个相同类型的 block 变量,建议使用。

//不使用类型定义
void (^firstBlock)(void) = ^{
    NSLog(@"This is firstBlock");
};
void (^secondBlock)(void) = ^{
    NSLog(@"This is secondBlock");
};
//使用类型定义
typedef void (^SimpleBlock)(void);
SimpleBlock firstBlock = ^{
    NSLog(@"This is firstBlock");
};
SimpleBlock secondBlock = ^{
    NSLog(@"This is secondBlock");
};

在嵌套 block 时使用,可读性更高。

//不使用类型定义
void (^(^nestBlock)(void (^)(void))(void) = ^(void (^aBlock)(void)) {
    return aBlock;
};
//使用类型定义
SimpleBlock (^nestBlock)(SimpleBlock) = ^(SimpleBlock aBlock) {
    return aBlock;
};

earlyMorning
0 声望0 粉丝

iOSer