swift中的Coredata NSpredicate谓词日期

swift中的Coredata NSpredicate谓词日期,swift,core-data,nsdate,nspredicate,Swift,Core Data,Nsdate,Nspredicate,一个古老的经典问题,但我明白了 func callThisDay(startDate:Date, endDate:Date) -> [Login]{ var datas = [Login]() let fetchRequest:NSFetchRequest<Login> = Login.fetchRequest() let predicate = NSPredicate(format: "date >= %@ AND date < %@",

一个古老的经典问题,但我明白了

func callThisDay(startDate:Date, endDate:Date) -> [Login]{
    var datas = [Login]()
    let fetchRequest:NSFetchRequest<Login> = Login.fetchRequest()
    let predicate = NSPredicate(format: "date >= %@ AND date < %@", argumentArray: [startDate, endDate])
    fetchRequest.predicate = predicate
    do{
        let allData = try viewContext.fetch(Login.fetchRequest())
        for data in allData{
            datas.append(data as! Login)
        }
    }catch{
        print(error)
    }
    return datas
}
func callThisDay(开始日期:日期,结束日期:日期)->[登录]{
变量数据=[Login]()
let fetchRequest:NSFetchRequest=Login.fetchRequest()
let predicate=NSPredicate(格式:“日期>=%@和日期<%@”,argumentArray:[startDate,endDate])
fetchRequest.predicate=谓词
做{
让allData=try viewContext.fetch(Login.fetchRequest())
对于allData中的数据{
data.append(数据作为!登录)
}
}抓住{
打印(错误)
}
返回数据
}
它总是返回所有数据。我怎么能只得到一天的时间呢?

当然,它总是返回所有数据,因为您忽略了自定义获取请求

替换

let allData = try viewContext.fetch(Login.fetchRequest())

该方法可以简化

func callThisDay(startDate:Date, endDate:Date) -> [Login] {
    let fetchRequest : NSFetchRequest<Login> = Login.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "date >= %@ AND date < %@", startDate as NSDate, endDate as NSDate)
    do {
        return try viewContext.fetch(fetchRequest)
    } catch {
        print(error)
        return []
    } 
}
func callThisDay(开始日期:日期,结束日期:日期)->[登录]{
let fetchRequest:NSFetchRequest=Login.fetchRequest()
fetchRequest.predicate=NSPredicate(格式:“日期>=%@和日期<%@”,起始日期为NSDate,结束日期为NSDate)
做{
返回try viewContext.fetch(fetchRequest)
}抓住{
打印(错误)
返回[]
} 
}

如何创建startDate和endDate,其值是什么?
func callThisDay(startDate:Date, endDate:Date) -> [Login] {
    let fetchRequest : NSFetchRequest<Login> = Login.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "date >= %@ AND date < %@", startDate as NSDate, endDate as NSDate)
    do {
        return try viewContext.fetch(fetchRequest)
    } catch {
        print(error)
        return []
    } 
}