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?
}
我想获取名称以列表元素之一(x0
或 x1
或 x2
)开头的所有对象
因此,名称为 x072
或 x1e2
的对象将包含在结果中,但名称为 x933
或 y011
的对象不会
谢谢
有多种方法可以做到这一点。一种选择(在这个用例中不太实用)是使用 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 路由。
我有一个字符串列表
filterList = ['x0', 'x1', 'x2']
我的对象如下:
class Item: Object {
@Persisted var name: String?
}
我想获取名称以列表元素之一(x0
或 x1
或 x2
)开头的所有对象
因此,名称为 x072
或 x1e2
的对象将包含在结果中,但名称为 x933
或 y011
的对象不会
谢谢
有多种方法可以做到这一点。一种选择(在这个用例中不太实用)是使用 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 路由。