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());