我有一个UILocalNotification
的数组。在每个通知中都有一个userInfo
属性,即NSDictionary
。在userInfo中,我设置了一个键@"ID"
,该值是一个唯一的ID。
所以我要做的是检查通知数组(如果任何userInfo属性)是否为键@"test"
具有值@"ID"
,然后返回YES
否则NO
。我知道如何使用for循环来实现这一点,但我想知道是否有更优雅的方法来实现它。
答案 0 :(得分:2)
你可以使用-[NSArray indexesOfObjectsPassingTest:]
,其中一个块为匹配对象返回YES,否则为NO:
NSArray *array = ...;
NSIndexSet *matchingIndexes = [array indexesOfObjectsPassingTest:^BOOL(UILocalNotification *notification, NSUInteger idx, BOOL *stop) {
return [notification.userInfo[@"ID"] isEqualToString:@"test"];
}];
return [matchingIndexes count] != 0;
答案 1 :(得分:2)
我猜你不可能比基本的快速枚举更好地执行性能 - 可能使用“enumerate with options”方法之一,允许并发 - 但是肯定有更优雅的方法来编写你想做什么:
[[array valueForKeyPath:@"userInfo.ID"] containsObject:@"test"];