如何在swift中获取一个月的对象

时间:2015-12-02 11:35:35

标签: arrays swift nsdate nsdatecomponents

我有一个数组,这个数组包含Observation类型元素,其中包含date属性。

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

假设我有一个日期01/11/2015,所以我希望获得observationList中包含第11个月和2015年的所有元素。

示例代码如下,

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

var observationList = [Observation]()

假设上面的observationList具有该元素,那么我将如何获得所有元素,例如 2015年11月?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分: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
}