2015-12-02 33 views
0

我有一个数组,并且此数组包含Observation type元素,其中有一个date属性。如何快速获取对象一个月

我只想根据月份和年份获取所有元素。

假设,如果我有一个日期2015年1月11日,所以我希望得到所有从有第11个月和一年observationList元素2015

示例代码如下,

class Observation 
{ 
    var date:NSDate = NSDate() 
    var value:String = "" 
} 

var observationList = [Observation]() 

假设上述observationList有元素,那么我将如何获得例如2015年11月?

+0

为此使用'NSDateComponents'。您需要一个'NSCalendar'实例来获取日期的日期组件。 – dasdom

回答

0

您可以过滤阵列

var observations = [Observation]() 

filter这样的方法

let calendar = NSCalendar.currentCalendar() 
let filteredObservations = observations.filter { (observation) -> Bool in 
    let components = calendar.components([.Month, .Year], fromDate:observation.date) 
    return components.month == 11 && components.year == 2015 
} 
+0

谢谢@appzYourLife。有效! – neena

0

正如@dasdom指出的那样,您需要一个NSCalendar来获取NSDate的组件。

let calendar = NSCalendar.currentCalendar() // you can also ask for a specific calendar (e.g Gregorian) 
let components = calendar.components([.Month, .Year], fromDate:date) 
0

创建一个扩展,让您的最新组件:

extension NSDate { 
    var month: Int { 
     return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Month, fromDate: self) 
    } 
    var year: Int { 
     return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Year, fromDate: self) 
    } 
} 

然后你就可以轻松地将日期筛选如下:

class Observation { 
    var date = NSDate() 
    var value = String() 
    init(date: NSDate, value: String) { 
     self.date = date 
     self.value = value 
    } 
} 

let ob1 = Observation(date: NSDate(), value: "Testing") 

let observationList = [ob1] 

let filteredList = observationList.filter(){ $0.date.year == 2015 && $0.date.month == 12 } 

print(filteredList.first?.value ?? "") // Testing