Objective C 逻辑或运算符未在块中计算

Objective C Logical OR operator not evaluating in block

我正在尝试检查哪个数组元素的值彼此相等或等于 NSNumber 10。数组的计数为 15。问题是当我根据 NSNumber 测试值时if statement 中的 10,代码似乎没有求值。

例如,在下面的数组中,代码应该 return 索引 0 中的值出现在索引 {0, 9, 10} 中,因为 NSNumber 1 出现在索引 0 中和 10 并且 NSNumber 10 出现在索引 9 处。

1-2-3-4-5-6-7-8-9-10-1-2-3-4-5

但是,它只评估索引 0 中的 NSNumber 值是否等于 NSNumber 1 而不是 NSNumber 10。输出不是预期的 {0, 9 , 10} 但只有 {0, 10}。

for (NSNumber *number in mutableArray) {
    self.matchingIndex = [mutableArray indexesOfObjectsPassingTest:
                         ^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) 
    {
        BOOL returnValue;
        NSNumber *ten = [NSNumber numberWithInt:10];
        if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])
        {
            returnValue = TRUE;
        }
        return returnValue;  
    }];
    [self testIndexSet:self.matchingIndex];
}     

您的期望不正确。 number,仅对于数组中的@10 元素,外层循环迭代器将等于 10。循环的预期结果是 1..5 元素有两个索引,其余元素有一个索引。

如果您希望循环查找 @10 元素并将其包含在每个结果中,请将条件从...

if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])

到...

if ([number isEqualToNumber:obj] || [obj isEqualToNumber:ten])

顺便说一句,块可以更简单地表述为...

NSIndexSet *matchingIndex = [mutableArray indexesOfObjectsPassingTest:^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) {
    return ([number isEqualToNumber:obj] || [obj isEqualToNumber:@10]);
}];