【发布时间】:2013-05-03 11:32:08
【问题描述】:
我正在使用 Objective-C 块,但我无法理解下面的代码执行。
代码如下:
NSArray *array = @[@"A", @"B", @"C", @"A", @"B", @"Z", @"G", @"are", @"Q"];
NSSet *filterSet = [NSSet setWithObjects: @"A", @"Z", @"Q", nil];
BOOL (^test)(id obj, NSUInteger idx, BOOL *stop);
test = ^(id obj, NSUInteger idx, BOOL *stop) {
if (idx < 5) {
if ([filterSet containsObject: obj]) {
return YES;
}
}
return NO;
};
NSIndexSet *indexes = [array indexesOfObjectsPassingTest:test];
NSLog(@"indexes: %@", indexes);
输出:
indexes: <NSIndexSet: 0x10236f0>[number of indexes: 2 (in 2 ranges), indexes: (0 3)]
在[array indexesOfObjectsPassingTest:test];这个方法中,test块是我传递的参数。
但是在上面的块中,test = ^(id obj, NSUInteger idx, BOOL *stop) 参数obj、idx 和stop 可以取什么值呢?他们来自哪里?
【问题讨论】:
标签: ios objective-c macos objective-c-blocks