Ios 无法在Swift中使用NSPredicate查询日期
我正在尝试获取晚于特定日期的日期。我的谓词如下:Ios 无法在Swift中使用NSPredicate查询日期,ios,swift,core-data,nspredicate,Ios,Swift,Core Data,Nspredicate,我正在尝试获取晚于特定日期的日期。我的谓词如下: NSPredicate(format: "date > \(currentDate)") 执行提取请求时,我捕获到一个异常: 'Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"' 我想我可以提出这样的问题。我做错了什么?NSPredicate(format::)接受一个格式字符串和一个参数列表,但传递的是一个简单字符串。这不起作用,因为此初始值
NSPredicate(format: "date > \(currentDate)")
执行提取请求时,我捕获到一个异常:
'Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"'
我想我可以提出这样的问题。我做错了什么?NSPredicate(format::)
接受一个格式字符串和一个参数列表,但传递的是一个简单字符串。这不起作用,因为此初始值设定项不仅对参数调用stringWithFormat:
,而且在构建谓词时实际查看参数的类型信息
通过将日期作为参数传递,可以使用该初始值设定项:
let datePredicate = NSPredicate(format: "date > %@", currentDate)
在swift 3中,谓词更改为:
let datePredicate = NSPredicate(format: "date > %@", currentDate as NSDate)
使用Swift 3,根据您的需要,您可以选择以下5种模式之一来解决您的问题
#1.将
NSPredicate
初始值设定项与NSDate
实例一起使用
NSPredicate
有一个名为init(格式:论据:)代码>具有以下声明:
init(format predicateFormat: String, arguments argList: CVaListPointer)
init(format predicateFormat: String, argumentArray arguments: [Any]?)
通过将参数列表中的值替换为格式字符串并分析结果,创建并返回新谓词
与NSDate
一起使用时,可以使用init(格式:论据:)代码>如下所示:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
#2.将NSPredicate
初始值设定项与NSDate
实例一起使用
NSPredicate
具有名为init(格式:argumentArray:)
的初始值设定项,该初始值设定项具有以下声明:
init(format predicateFormat: String, arguments argList: CVaListPointer)
init(format predicateFormat: String, argumentArray arguments: [Any]?)
通过将给定数组中的值替换为格式字符串并分析结果,创建并返回一个新谓词
与NSDate
一起使用时,可以使用init(格式:argumentArray:)代码>如下所示:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
#3.使用NSPredicate
初始值设定项,并将Date
实例强制转换为NSDate
与Date
一起使用时,您可以通过将Date
实例强制转换为NSDate
来设置NSPredicate
的实例,如下所示:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
#4.使用NSPredicate
初始值设定项,并将Date
实例强制转换为CVarArg
与Date
一起使用时,您可以通过将Date
实例强制转换为CVarArg
来设置NSPredicate
的实例,如下所示:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
#5.将NSPredicate
初始值设定项与Date
实例一起使用
与Date
一起使用时,可以使用init(格式:argumentArray:)
设置NSPredicate
的实例,如下所示:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
不知道在Swift上使用NSPredicate时必须显式转换为NSDate。谢谢,currentDate
应该是日期类型,对吗?或者可以是字符串?