Capturing values 获取值

在获取值方面,Objective-C 的区块和 Swif 的闭包是一样的,我们可以来看一下这个例子:

NSString *name = @"Zaphod";
NSString* (^printUniversalGreeting)(void) = ^{
    return [NSString stringWithFormat:@"Don't panic, %@!", name];
};
NSLog(@"%@", printUniversalGreeting());

如果你想在区块外设置内部的值,你要用到 __block :

NSInteger __block number = 0;

也有人这么写:

__block NSInteger number = 0;

在苹果的官方文档里面,两种写法是被认可的。但是在实际的应用中,你会发现 block NSInteger 更常见,但其实这么写不怎么规范。不得不说,把 block 放在前面,可读性上面更强一些。

所以这里就不用太在意你选择何种语法格式了,得到了想要的结果就好啦,完整代码看这里:

NSInteger __block number = 0;
NSString* (^printMeaningOfLife)(void) = ^{
    number = 42;
    return [NSString stringWithFormat:@"How many roads must a man
walk down? %ld.", number];
};
NSLog(@"%@", printMeaningOfLife());

results matching ""

    No results matching ""