通过 NSDate 对象属性进行 Swift 过滤 [英] Swift filter by NSDate object property
问题描述
我想用日期属性过滤我的自定义对象.
I would like to filter my custom objects with a date property.
例如:
class Event
{
let dateFrom: NSDate!
let dateTo: NSDate!
init(dateFrom: NSDate, dateTo: NSDate) {
self.dateFrom = dateFrom
self.dateTo = dateTo
}
}
现在我有一个可能包含 500 个事件的列表,我只想显示特定日期的事件.我可以遍历所有对象,并创建一个新的对象数组,但我也可以使用过滤器吗?
Now i have a List of maybe 500 Events, and i just want to show the Events for a specific date. I could loop through all Objects, and create a new Array of Objects, but could i also use a filter?
我尝试过这样的事情:
let specificEvents = eventList.filter( { return $0.dateFrom > date } )
日期是特定日期的 NSDate 对象,但我无法使用 > 操作符.
Where date is a NSDate Object for a specific date, but i am not able to use the > operater.
是否有一种简单的方法可以获取特定日期的所有事件,其中日期介于 dateFrom 和 dateTo 期间?
Is there an easy way to get all the events for a specific date, where the date is between the dateFrom and dateTo period?
推荐答案
感谢 Martin 为我指明了正确的方向.
Thanks to Martin for pointing me into the right direction.
如果其他人正在寻找如何在 Swift 中解决此问题,这里是一个答案:
Here is an answer if someone else is looking how to solve this in Swift:
向 NSDate 添加扩展:
Add an Extension to NSDate:
public func <(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedAscending
}
public func ==(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedSame
}
extension NSDate: Comparable { }
所以你可以使用 <和 > 运算符用于 NSDate 比较.
So you are able to use the < and > operator for NSDate comparison.
var date = dateFormatter.dateFromString(dateString)
var dateTomorrow = date?.dateByAddingTimeInterval(NSTimeInterval(60*60*24)) // add one Day
eventsToday = allEvents.filter( { return $0.dateFrom >= date && $0.dateTo < dateTomorrow} )
这篇关于通过 NSDate 对象属性进行 Swift 过滤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!