出于学习(尚不实用)的目的,我想在 NSDictionary 上使用以下方法,使用我定义的测试返回一组具有值的键。不幸的是不知道如何指定谓词。
NSDictionary keysOfEntriesPassingTest:
- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate
例如,假设我所有的值都是 NSURL,我想取回端口 8080 上的所有 URL。这是我编写代码的尝试——尽管它对我来说并没有什么意义正确的:
NSSet * mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
if( [[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {
return key;
}]
那是因为我得到了以下编译器错误:
初始化 'void (^)(struct objc_object *, struct objc_object *, BOOL *)' 的不兼容块指针类型,预期 'BOOL (^)(struct objc_object *, struct objc_object *, BOOL *)'
我错过了什么?我会很感激一些文档的指针,这些文档更详细地介绍了谓词应该是的“块对象”。
谢谢!
这是有效的代码:
NSSet *mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop)
{
if ([[obj port] isEqual:[NSNumber numberWithInt: 8080]])
return YES;
else
return NO;
}];