Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何过滤多个变量,其中一个变量是Swift中的日期?_Ios_Swift_Realm - Fatal编程技术网

Ios 如何过滤多个变量,其中一个变量是Swift中的日期?

Ios 如何过滤多个变量,其中一个变量是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

领域版本->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, 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))