通过NSDate对象属性的Swiftfilter
我想过滤我的自定义对象的date属性。
例如:
class Event { let dateFrom: NSDate! let dateTo: NSDate! init(dateFrom: NSDate, dateTo: NSDate) { self.dateFrom = dateFrom self.dateTo = dateTo } }
现在我有一个列表,也许500个事件,我只想显示一个特定date的事件。 我可以遍历所有对象,并创build一个新的对象数组,但我也可以使用filter?
我尝试了这样的事情:
let specificEvents = eventList.filter( { return $0.dateFrom > date } )
哪里date是特定date的NSDate对象,但我不能使用>操作。
有一个简单的方法来获取所有的事件在一个特定的date,其中的date是从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 $0.dateFrom >= date && $0.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 } }