Ios NSDate组件到NSDate-Swift

Ios NSDate组件到NSDate-Swift,ios,swift,nsdate,nsdatecomponents,Ios,Swift,Nsdate,Nsdatecomponents,我有这个功能: private func getCurrentDateComponent() -> NSDateComponents { let date = NSDate() let calendar = NSCalendar.currentCalendar() let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUn

我有这个功能:

private func getCurrentDateComponent() -> NSDateComponents {
        let date = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: date)
        return components
    }
当我调用它并使用函数
date

var d = this.getCurrentDateComponent().date
我不知道为什么变量d是零

谢谢你的帮助

我就是这样做的:

let allUnits = NSCalendarUnit(rawValue: UInt.max)
return UICalendar.currentCalendar().components(allUnits, fromDate: NSDate())
请注意,在Swift 2.0中,不再使用按位OR运算符
|
,而是
NSCalendarUnit
符合
选项设置类型
格式:

let timeUnits : NSCalendarUnit = [.Hour, .Minute, .Second]
日期和日期组件之间的转换始终需要日历。 您有两个选项(比较):

  • 为日期组件分配日历,即添加

    components.calendar = calendar
    
    到您的
    getCurrentDateComponent()
    方法。然后

    var d = getCurrentDateComponent().date
    
    一切正常。(不为日期指定日历。) 组件,
    date
    属性返回您观察到的
    nil
    。)

  • 或者,调用日历方法进行转换:

    let d = NSCalendar.currentCalendar().dateFromComponents(getCurrentDateComponent())
    

您需要在使用
NSDateComponents
之前设置日历,因为没有日历就没有日期

let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: date)
components.calendar = NSCalendar.currentCalendar();
return components

Swift 4:

let date = NSCalendar.current.date(from: components) 

// components is your component name