相关疑难解决方法(0)

NSDictionary值/对象的关键?

我们可以NSDictionary通过传递特定值或对象来获取对象的关键字吗?

cocoa-touch objective-c nsdictionary ios

80
推荐指数
2
解决办法
6万
查看次数

如何指定NSDictionary的keysOfEntriesPassingTest所需的块对象/谓词?

为了学习(不实用)目的,我想在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)

macos cocoa grand-central-dispatch

4
推荐指数
1
解决办法
4936
查看次数