-1

我有一个UILocalNotifications 数组。在每个通知中都有一个userInfo属性是NSDictionary. 在 userInfo 我设置了一个键@"ID",值是一个唯一的 ID。

所以我想要做的是检查通知数组是否有任何 userInfo 属性具有@"test"key 的值,@"ID"然后返回YESelse NO。我知道如何使用 for 循环来实现这一点,但我想知道是否有更优雅的方式来做到这一点。

4

2 回答 2

2

我猜你不太可能比基本的快速枚举在性能方面做得更好——也许使用“带选项枚举”方法之一,允许并发——但肯定有更优雅的方法来编写你的内容重新尝试做:

[[array valueForKeyPath:@"userInfo.ID"] containsObject:@"test"];
于 2013-01-08T20:21:52.727 回答
2

您可以使用-[NSArray indexesOfObjectsPassingTest:]which 接受一个为匹配对象返回 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;
于 2013-01-08T18:59:00.207 回答