objective-c - NSPredicate 对复杂对象数组的过滤

标签 objective-c swift nspredicate

所以,基本上,问题是,我有一个对象,我们称之为“产品”

struct Product {
  let categories: [Category]
}

类别如下所示:

struct Category {
  let id: Int
}

我需要的是创建 NSPredicate,它会检查类别列表是否包含特定 id 的类别。现在确定是否可能,但也许有比使用简单 Int 数组创建另一个属性更好的解决方法? 更新:NSPredicate 是强制性的,因为我需要在 Realm 数据库过滤器查询中使用它。

最佳答案

NSPredicate 的正确格式是:

let predicate = NSPredicate(format: "ANY categories.id == %@", argumentArray: [1])

上面的示例将返回 categories 数组包含 id 1 的 Product 的所有 Products

当然,这是假设您只查找单个 id 的类别。如果您需要检查多个 id,您可以使用 OR 修改上面的内容。

注意:我使用 NSArray 而不是 Realm 测试了上述谓词。但是,如果您检查 Realm 谓词备忘单,它确实支持谓词正在使用的所有运算符:

https://academy.realm.io/posts/nspredicate-cheatsheet/?_ga=2.32752254.1161432538.1537175891-1199086799.1527592477

关于objective-c - NSPredicate 对复杂对象数组的过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52363623/

相关文章:

ios - RxSwift - 获取列表中的每一项

ios - 在 Swift 中验证电子邮件地址的最佳做法是什么?

ios - RegEx:如何在 NSPredicate 中使用正则表达式?

ios - 长按手势识别器仅在手指抬起时触发

Objective-c:NSButton setAction 不工作

iphone - 将导航 Controller 添加到 Split View中的详细 View

ios - 最大化 UITabBarItem 图像的大小

swift - 如何制作通用的 UIViewRepresentable 结构?

ios - 创建新对象时查询核心数据的特定属性,如果存在则返回对象,如果不存在则创建一个新对象

ios - 点击图像全屏