realm swift - 过滤对象 属性 以列表中包含的字符串开头

realm swift - filter objects with a property that starts with a string included in a list

我有一个字符串列表

filterList = ['x0', 'x1', 'x2']

我的对象如下:

class Item: Object {
    @Persisted var name: String?
}

我想获取名称以列表元素之一(x0x1x2)开头的所有对象

因此,名称为 x072x1e2 的对象将包含在结果中,但名称为 x933y011 的对象不会

谢谢

有多种方法可以做到这一点。一种选择(在这个用例中不太实用)是使用 Realm Swift Query UI

let results2 = realm.objects(Item.self).where {
    [=10=].name.starts(with: "x0") ||
    [=10=].name.starts(with: "x1") ||
    [=10=].name.starts(with: "x2")
}

如您所见,有几项没问题。如果有几十个呢?不太实用。这就是 NSCompoundPredicate 真正闪耀的地方。看看这个

var predicateArray = [NSPredicate]()

for name in ['x0', 'x1', 'x2'] {
    let predicate = NSPredicate(format: "name BEGINSWITH[cd] %@", name)
    predicateArray.append(predicate)
}

let compoundPredicate = NSCompoundPredicate(orPredicateWithSubpredicates: predicateArray)

let results = realm.objects(Item.self).filter(compoundPredicate)

更加实用,因为列表中的元素可以根据需要添加。

还有一些其他选项,但在此用例中建议使用 NSPredicate 路由。