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