Swift 按 NSDate 对象筛选 属性
Swift filter by NSDate object property
我想过滤日期为 属性 的自定义对象。
例如:
class Event
{
let dateFrom: NSDate!
let dateTo: NSDate!
init(dateFrom: NSDate, dateTo: NSDate) {
self.dateFrom = dateFrom
self.dateTo = dateTo
}
}
现在我有一个可能包含 500 个事件的列表,我只想显示特定日期的事件。我可以遍历所有对象,并创建一个新的对象数组,但我也可以使用过滤器吗?
我会尝试这样的事情:
let specificEvents = eventList.filter( { return [=13=].dateFrom > date } )
其中日期是特定日期的 NSDate 对象,但我无法使用 > 运算符。
是否有一种简单的方法来获取特定日期的所有事件,该日期介于 dateFrom 和 dateTo 之间?
感谢 Martin 为我指明了正确的方向。
如果其他人在 Swift 中寻找如何解决这个问题,这里是一个答案:
向 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 比较。
var date = dateFormatter.dateFromString(dateString)
var dateTomorrow = date?.dateByAddingTimeInterval(NSTimeInterval(60*60*24)) // add one Day
eventsToday = allEvents.filter( { return [=11=].dateFrom >= date && [=11=].dateTo < dateTomorrow} )
对于Swift 3.x更新:-
extension Date: Comparable{
public static func <(a: Date, b: Date) -> Bool{
return a.compare(b) == ComparisonResult.orderedAscending
}
static public func ==(a: Date, b: Date) -> Bool {
return a.compare(b) == ComparisonResult.orderedSame
}
}
我想过滤日期为 属性 的自定义对象。
例如:
class Event
{
let dateFrom: NSDate!
let dateTo: NSDate!
init(dateFrom: NSDate, dateTo: NSDate) {
self.dateFrom = dateFrom
self.dateTo = dateTo
}
}
现在我有一个可能包含 500 个事件的列表,我只想显示特定日期的事件。我可以遍历所有对象,并创建一个新的对象数组,但我也可以使用过滤器吗?
我会尝试这样的事情:
let specificEvents = eventList.filter( { return [=13=].dateFrom > date } )
其中日期是特定日期的 NSDate 对象,但我无法使用 > 运算符。
是否有一种简单的方法来获取特定日期的所有事件,该日期介于 dateFrom 和 dateTo 之间?
感谢 Martin 为我指明了正确的方向。
如果其他人在 Swift 中寻找如何解决这个问题,这里是一个答案:
向 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 比较。
var date = dateFormatter.dateFromString(dateString)
var dateTomorrow = date?.dateByAddingTimeInterval(NSTimeInterval(60*60*24)) // add one Day
eventsToday = allEvents.filter( { return [=11=].dateFrom >= date && [=11=].dateTo < dateTomorrow} )
对于Swift 3.x更新:-
extension Date: Comparable{
public static func <(a: Date, b: Date) -> Bool{
return a.compare(b) == ComparisonResult.orderedAscending
}
static public func ==(a: Date, b: Date) -> Bool {
return a.compare(b) == ComparisonResult.orderedSame
}
}