2015-07-08 6 views
4

У меня есть эта функция:NSDateComponents к NSDate - Swift

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 равна нулю .. .

Спасибо за вашу помощь

Ysee

ответ

4

Вот как я это делаю:

let allUnits = NSCalendarUnit(rawValue: UInt.max) 
return UICalendar.currentCalendar().components(allUnits, fromDate: NSDate()) 

Обратите внимание, что в Swift 2.0 побитовых оператор ИЛИ | не используются больше, вместо этого NSCalendarUnit соответствует формату OptionSetType:

let timeUnits : NSCalendarUnit = [.Hour, .Minute, .Second] 
0

Конверсия между датами и компонентами даты всегда требуется calendar. У вас есть два варианта (сравните NSCalendar dateFromComponents: vs NSDateComponents date):

  • Назначьте календарь компонентов даты, то есть добавить

    components.calendar = calendar 
    

    к вашему методу getCurrentDateComponent(). Затем

    var d = getCurrentDateComponent().date 
    

    работает должным образом. (. Без назначения календаря компонентов даты , то date свойство возвращает nil, как вы наблюдали)

  • В качестве альтернативы, вызовите метод календаря для преобразования:

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

Вам нужны установите календарь перед использованием NSDateComponents, потому что без календаря нет даты.

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