2015-06-12 22 views
13

Ho lavorato a un'app di orologio in Swift e con Xcode 6.3.2 il codice seguente si sviluppa e funziona perfettamente.Differenze nella sintassi NSDateComponents?

// Get current time 
let date = NSDate() 
let calendar = NSCalendar.currentCalendar() 
let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitSecond | .CalendarUnitNanosecond, fromDate: date) 
let hour = components.hour % 12 
let minute = components.minute 
let second = components.second 
let nanosecond = components.nanosecond 

Tuttavia quando carico lo stesso progetto in Xcode 7.0 beta e non fare cambiamenti di sorta, ottengo un errore sulla linea calendar.components.

Could not find member 'CalendarUnitHour' 

Ho guardato la documentazione e tutte le costanti NSCalendarUnit sono obsolete (in iOS 8.0 si dice), ma la descrizione del metodo per il metodo componenti dice ancora di usarli.

Ho giocato con altri valori di completamento automatico NSCalendarUnit ma nessuno produce codice funzionante e non riesco a trovare alcun esempio recente online, forse perché è nuovo di zecca.

Qualcuno conosce il nuovo modo corretto di farlo?

risposta

32

Swift 2

I NSCalendarUnit nomi sono cambiati a Swift 2.

Inoltre, ora dobbiamo passare questi argomenti in un gruppo di opzioni, in questo modo:

let components = calendar.components([.Hour, .Minute, .Second, .Nanosecond], fromDate: date) 

Swift 3

Molte cose sono cambiate, accor ding allo Swift API Design Guidelines.

sintassi aggiornamento:

let date = Date() 
let calendar = Calendar.current() 
let components = calendar.components([.hour, .minute, .second, .nanosecond], from: date) 

Swift 4

Calendar.current è ora una proprietà, e .components è stato rinominato .dateComponents. Altrimenti è lo stesso che nel Swift 3.

let calendar = Calendar.current 
let components = calendar.dateComponents([.hour, .minute, .second, .nanosecond], from: date) 
+0

Grazie! Mi stava facendo impazzire. Il mio codice è pulito al 100% ora. :-) – zkarj

+1

Un altro cambiamento ridicolo senza alcun modo di capirlo oltre a trovare questa domanda SO. Grazie Apple! (sarcasmo). Grazie Eric! (non sarcasmo). – lespommes

+0

A causa di modifiche al nome in Swift 2, mi ha dato errore "Tipo di espressione è ambiguo senza più contesto". –

Problemi correlati