大家好,我在使用嵌套对象查询归档一件事情时遇到了困难。我有两个 Realm 对象 Championship 和 Game。
class Championship: Object {
dynamic var id: Int = 0
dynamic var name: String = ""
let games = List<Game>
override static func primaryKey() -> String? {
return "id"
}
}
class Game: Object {
dynamic var id: Int = 0
dynamic var homeTeamName: String = ""
dynamic var awayTeamName: String = ""
dynamic var status: String = "" //"inprogress", "finished", "scheduled"
override static func primaryKey() -> String? {
return "id"
}
}
基本上我想检索所有比赛状态为“进行中”的锦标赛,所以我要做的是存档:
let realm = try! Realm()
realm.objects(Championship.self).filter("ANY games.status = 'inprogress'")
该查询所做的是为我提供所有至少有一场比赛处于该状态的锦标赛,但也为我提供了该锦标赛的所有比赛,但实际上我只想要状态为“进行中”的比赛。
有什么办法吗?
最佳答案
您可以在这里采用两种方法。如果您希望所有游戏都具有 inprogress
状态,您可以这样写:
let inProgressGames = realm.objects(Championship.self)
.flatMap { $0.games }
.filter { $0.status == "inprogress" }
这将返回 [Game]
数组中所有正在进行的游戏。 flatMap
用于合并来自所有锦标赛的所有游戏,filter
用于过滤所有状态为inProgress
的游戏。
如果你想要每场比赛都在进行中
的锦标赛,你可以这样写:
let inProgressChampionships = realm.objects(Championship.self).filter {
let inProgressGames = $0.games.filter { $0.status == "inprogress"}
return $0.games.count == inProgressGames.count
}
这将返回 Championship
数组,其中每场比赛都在进行中
。
除此之外,我建议使用 enum
作为游戏状态而不是硬编码字符串。
关于swift - Realm 查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39425544/