所以,基本上,问题是,我有一个对象,我们称它为“产品”
struct Product {
let categories: [Category]
}
类别如下:
struct Category {
let id: Int
}
我需要的是创建NSPredicate,它将检查类别列表是否包含某些ID的类别。现在确定是否有可能,但是也许比使用简单的Int数组创建另一个属性更好的解决方法? 更新:NSPredicate是强制性的,因为我需要在Realm数据库过滤器查询中使用它。
答案 0 :(得分:2)
NSPredicate的正确格式为:
let predicate = NSPredicate(format: "ANY categories.id == %@", argumentArray: [1])
上面的示例将返回其Products
数组包含categories
为1的Product
的所有id
。
当然,这是假设您只在寻找单个id
的类别。如果您需要检查多个ids
,则可以使用OR
修改以上内容。
注意:我使用NSArray
而非Realm测试了上述谓词。但是,如果您检查Realm谓词备忘单,则它确实支持该谓词正在使用的所有运算符:
答案 1 :(得分:0)
如果您使用的是Swift,则可以使用filter并包含方法来过滤数组。
当您拥有包含产品的数组时,可以通过以下方式对其进行过滤:
let filteredProducts = products.filter{ $0.categories.contains(where: { $0.id == 1 })}
上面的代码过滤包含id = 1类别的产品
答案 2 :(得分:0)
您可以简单地检查通过筛选类别返回的数组的计数。
struct Product {
let categories: [Category]
}
struct Category {
let id: Int
}
let c1 = Category(id: 1)
let c2 = Category(id: 2)
let c3 = Category(id: 3)
let p = Product(categories: [c1, c2, c3])
let yourCategoryId = 1
let filteredResults = p.categories.filter {
$0.id == yourCategoryId
}
let isCategoryWithIdPresent = filteredResults.count > 0 ? true : false
print(isCategoryWithIdPresent)
希望有帮助