2015-12-02 18 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