2

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)値は何ですか? 彼らはどこ出身ですか?objidxstop

4

1 に答える 1