Ios 如何过滤多个变量,其中一个变量是Swift中的日期?
领域版本->2.10 Swift版本>3Ios 如何过滤多个变量,其中一个变量是Swift中的日期?,ios,swift,realm,Ios,Swift,Realm,领域版本->2.10 Swift版本>3 var uuid: String var resolutionID: Int var dateFrom: Date ... 我检查了变量是否为空。 我试过: 它不起作用 我也尝试过使用NSPredicate: let predicate = NSPredicate(format: "device.uuid = %@ AND resolution.idResolution = %@ AND time > %@", uuid, resolution
var uuid: String
var resolutionID: Int
var dateFrom: Date
...
我检查了变量是否为空。
我试过:
它不起作用
我也尝试过使用NSPredicate
:
let predicate = NSPredicate(format: "device.uuid = %@ AND resolution.idResolution = %@ AND time > %@", uuid, resolutionID, dateFrom as CVarArg)
realm.objects(DeviceDataRealm.self).filter(predicate)
它仅在没有日期
变量的情况下工作:
realm.objects(DeviceDataRealm.self).filter("device.uuid == '\(uuid)' AND resolution.idResolution == \(resolutionID))
有什么想法吗
谢谢。使用谓词时,不应将变量值嵌入谓词中,因为这通常会导致问题,而应在谓词中使用
%@
,并在谓词后写入变量名称
然而,问题在于混淆了比较运算符。我认为您误解了变量应该如何嵌入谓词。查看领域模型类定义的摘录,没有名为time
的属性,只有dateFrom
。类属性应作为普通字符串位于谓词内部,或使用%K
语法引用,而要筛选的变量名应使用%@
语法引用
下面的代码在一个领域中进行了测试,并输出了预期的结果
class DeviceDataRealm: Object {
var uuid: String = ""
var resolutionID: Int = 0
var dateFrom: Date = Date()
}
let deviceData = [DeviceDataRealm(value: ["dateFrom":Date.distantPast,"resolutionID":1]),DeviceDataRealm(value: ["dateFrom":Date.distantFuture,"resolutionID":2])]
try! realm.write {
realm.add(deviceData)
}
let searchUuid = "",searchResolutionID = 2, searchDateFrom = Date()
print(realm.objects(DeviceDataRealm.self).filter("uuid = %@ AND resolutionID = %@ AND dateFrom > %@", searchUuid, searchResolutionID, searchDateFrom))
输出:
结果(
[0]DeviceDataRealm{
uuid=;
分辨率d=2;
dateFrom=4001-01-01 00:00:00+0000;
}
)
你真的在寻找过去或未来的日期吗?我想只是你的比较运算符被翻转了。
class DeviceDataRealm: Object {
var uuid: String = ""
var resolutionID: Int = 0
var dateFrom: Date = Date()
}
let deviceData = [DeviceDataRealm(value: ["dateFrom":Date.distantPast,"resolutionID":1]),DeviceDataRealm(value: ["dateFrom":Date.distantFuture,"resolutionID":2])]
try! realm.write {
realm.add(deviceData)
}
let searchUuid = "",searchResolutionID = 2, searchDateFrom = Date()
print(realm.objects(DeviceDataRealm.self).filter("uuid = %@ AND resolutionID = %@ AND dateFrom > %@", searchUuid, searchResolutionID, searchDateFrom))