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

cocoa – 如何指定NSDictionary的keysOfEntriesPassingTest所需的块对象谓词?,第1张

概述为了学习(不实用)目的,我想在NSDictionary上使用以下方法,使用我定义的测试返回一组具有值的键.不幸的是,不知道如何指定谓词. NSDictionary keysOfEntriesPassingTest:- (NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate 比方说,例如我的 为了学习(不实用)目的,我想在NSDictionary上使用以下方法,使用我定义的测试返回一组具有值的键.不幸的是,不知道如何指定谓词.

NSDictionary keysOfEntrIEsPassingTest:- (NSSet *)keysOfEntrIEsPassingTest:(BOol (^)(ID key,ID obj,BOol *stop))predicate

比方说,例如我的所有值都是NSURL,我想找回8080端口上的所有URL.这是我对编码的准备 – 虽然它对我来说真的没有意义正确:

NSSet * mySet = [myDict keysOfEntrIEsPassingTest:^(ID key,BOol *stop) {                 if( [[obj port] isEqual: [NSNumber numberWithInt: 8080]]) {                     return key;                 }]

那是因为我得到了以下编译器错误:

incompatible block pointer types initializing ‘voID (^)(struct objc_object *,struct objc_object *,BOol *)’,expected ‘BOol (^)(struct objc_object *,BOol *)’

我错过了什么?我很欣赏一些文档的指针,这些文档详细介绍了谓词应该是的“块对象”.
谢谢!

这是有效的代码:

NSSet *mySet = [myDict keysOfEntrIEsPassingTest:^(ID key,BOol *stop){  if ([[obj port] isEqual:[NSNumber numberWithInt: 8080]])     return YES;   else     return NO;}];
解决方法 该错误表示您的块必须返回BOol而不是ID.检查文档.如果key / obj对通过了所需的测试,我怀疑你应该返回YES. 总结

以上是内存溢出为你收集整理的cocoa – 如何指定NSDictionary的keysOfEntriesPassingTest所需的块对象/谓词?全部内容,希望文章能够帮你解决cocoa – 如何指定NSDictionary的keysOfEntriesPassingTest所需的块对象/谓词?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1006834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存