我有以下型号
class Process: Object {
@objc dynamic var processID:Int = 1
let steps = List<Step>()
}
class Step: Object {
@objc private dynamic var stepCode: Int = 0
@objc dynamic var stepDateUTC: Date? = nil
var stepType: ProcessStepType {
get {
return ProcessStepType(rawValue: stepCode) ?? .created
}
set {
stepCode = newValue.rawValue
}
}
}
enum ProcessStepType: Int { // to review - real value
case created = 0
case scheduled = 1
case processing = 2
case paused = 3
case finished = 4
}
一个进程可以开始、处理、暂停、恢复(再次处于单步处理中)、暂停、再次恢复等。当前步骤是具有最新 stepDateUTC 的步骤
我正在尝试获取所有进程,最后一步是 stepType 处理“处理”的步骤,即。对于最后一个 stepDate,stepCode 是 2 。我带来了以下谓词......这是行不通的。对执行此类查询的正确执行有任何想法吗?
我最好的试验是那个。是否可以通过一个领域查询获得此结果。
let processes = realm.objects(Process.self).filter(NSPredicate(format: "ANY steps.stepCode = 2 AND NOT (ANY steps.stepCode = 4)")
let ongoingprocesses = processes.filter(){$0.steps.sorted(byKeyPath: "stepDateUTC", ascending: false).first!.stepType == .processing}
我希望会起作用
NSPredicate(format: "steps[LAST].stepCode = \(TicketStepType.processing.rawValue)")
我了解领域不支持 [LAST](根据备忘单)。但是无论如何我可以通过领域查询来实现我的目标吗?