我们可以NSDictionary通过传递特定值或对象来获取对象的关键字吗?
为了学习(不实用)目的,我想在NSDictionary上使用以下方法,使用我定义的测试返回一组具有值的键.不幸的是,不知道如何指定谓词.
NSDictionary keysOfEntriesPassingTest:
- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate
Run Code Online (Sandbox Code Playgroud)
比方说,例如我的所有值都是NSURL,我想找回8080端口上的所有URL.这是我对编码的准备 - 虽然它对我来说并不是真的有意义正确:
NSSet * mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
if( [[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {
return key;
}]
Run Code Online (Sandbox Code Playgroud)
那是因为我得到了以下编译器错误:
不兼容的块指针类型初始化'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;
}];
Run Code Online (Sandbox Code Playgroud)