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]);
}];
我正在尝试检查哪个数组元素的值彼此相等或等于 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]);
}];