【问题标题】:NSPredicate as a macro?NSPredicate 作为宏?
【发布时间】:2011-01-20 19:52:26
【问题描述】:

我将向我的模型对象添加一系列NSPredicates,我想将这些NSPredicates 作为宏添加到我的标题中,所以我可以像这样使用它们:

NSArray *filteredResults = FILTER_ARRAY_BY_NAME(rawArray, nameString);

想要这样做的原因之一是在我的标题中显示不同的宏,并且可以轻松更改/添加或删除谓词宏。

宏语法仍然有点难以理解,但是这个 NSPredicate 将如何转换为宏?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parentCategoryID == '%@'", categoryID];
return [categories filteredArrayUsingPredicate:predicate];

希望有人能帮帮我,在此先感谢。

【问题讨论】:

  • 必须是宏吗?为什么不只是一个普通函数,或者一个类方法,甚至一个分类方法。
  • 不,它不必是宏。我有 5-10 个谓词我必须首先实现,随着模型的发展,它们将被更改并添加更多,我将从模型类中的多个位置调用它们。宏将是将它们保留在标题中的好方法,使它们保持相似并快速添加/编辑新的。如果我对谓词的需求变得更大,我可能会在我的模型上添加一个类别或实现一组类方法以将它们全部分组 - 我你有一个很好的方法来实现这样的东西我总是对新的/更好的感兴趣方式:)

标签: objective-c macros


【解决方案1】:

简单:

#define FILTER_ARRAY_BY_NAME(rawArray, nameString) [rawArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"nameString == '%@'", nameString]]

【讨论】:

  • 谢谢雅各布:)显然我很接近。
  • 是的,它奏效了。然而,我确实删除了变量周围的 '' 单引号,所以它是:“nameString == %@”。我之前曾对此感到疑惑,因为文档明确指出它们应该存在,但我总是在谓词中省略它们以使它们起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多