gpt4 book ai didi

swift - RealmSwift + 多谓词

转载 作者:可可西里 更新时间:2023-10-31 23:55:04 26 4
gpt4 key购买 nike

我不知道如何根据用户选择组合谓词。这是我的数据概览。

Person.swift

class Person: Object {

let id = RealmOptional<Int>()
dynamic var name = ""
dynamic var console = ""

override static func primaryKey() -> String {
return "id"
}

示例 json 数据

{
"id": 822,
"name": "Ron",
"console": "XBox"
},
{
"id": 823,
"name": "Jenny"
"console": "Playstation 4"
}

举例来说,我有很多数据,控制台由“XBox”、“Playstation 4”、“Wii”、“Sega”或“PS Vita”组成。我创建了一个复选框过滤选项,以允许用户选择他们想要过滤的选项并显示拥有哪个控制台的人的姓名。

例如,如果他们同时选择“XBox”和“Playstation 4”,我如何断定它们并显示人名的结果?目前我只能显示一个这样的选项。

var player: Results<Person>!

func filter(sender: AnyObject) {
let realm = try! Realm()
self.player = realm.objects(Person).filter("%K = %@", "console", "XBox")
}

最佳答案

你不应该动态地制作一个 NSPredicate 查询字符串。以编程方式创建 NSCompoundPredicate 更容易(也更安全)。您可以将 NSPredicate 传递给 Realm 的 RealmCollectionType.filter(...)方法。下面是获取所有拥有 Xbox 或 Playstation 4 的 Person 的示例:

// could use .AndPredicateType here too, depending on what you want
let query = NSCompoundPredicate(type: .OrPredicateType, subpredicates: [NSPredicate(format: "console = 'Xbox'"), NSPredicate(format: "console = 'Playstation 4')])
let player = realm.objects(Person).filter(query)

虽然在你的情况下,如果你想要 OR 语义,你可能最好使用 IN 查询:

let selectedConsoles = ["Xbox", "Playstation 4"]
let player = realm.objects(Person).filter("console IN %@", selectedConsoles)

关于swift - RealmSwift + 多谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com