Это довольно странно, потому что предикат работает так, как вы его написали:
let sd = DateComponents(calendar: Calendar.current,year: 2019, month: 1, day: 1).date!
let ed = DateComponents(calendar: Calendar.current,year: 2020, month: 1, day: 1).date!
let whenPredicate = NSPredicate(format: "e_date BETWEEN %@", [sd, ed])
let date = DateComponents(calendar: Calendar.current,year: 2019, month: 10, day: 17).date!
whenPredicate.evaluate(with: ["e_date": date]) // true
Я подозреваю, что вы можете использовать ошибку <
и >
и оставить отзыв.
РЕДАКТИРОВАТЬ : Это может быть проблема с базовыми данными, поскольку при использовании методов и типов Objective- C синтаксис все еще корректен и работает ...
let dates : NSArray = [
DateComponents(calendar: Calendar.current,year: 2018, month: 10, day: 17).date! as NSDate,
DateComponents(calendar: Calendar.current,year: 2019, month: 10, day: 17).date! as NSDate,
DateComponents(calendar: Calendar.current,year: 2020, month: 10, day: 17).date! as NSDate,
]
let whenPredicate2 = NSPredicate(format: "SELF BETWEEN %@", [sd, ed])
dates.filtered(using: whenPredicate2)
EDIT2 : я подтверждаю, что с классами Objective- C ваш первоначальный предикат работает ...
@objc class MyEntity : NSObject {
@objc let e_date : NSDate
init(_ date: NSDate) {
self.e_date = date
super.init()
}
}
let entities : NSArray = [
MyEntity(DateComponents(calendar: Calendar.current,year: 2018, month: 10, day: 17).date! as NSDate),
MyEntity(DateComponents(calendar: Calendar.current,year: 2019, month: 10, day: 17).date! as NSDate),
MyEntity(DateComponents(calendar: Calendar.current,year: 2020, month: 10, day: 17).date! as NSDate),
]
entities.filtered(using: whenPredicate)