2015-05-12 37 views
9

Sono bloccato con una sorta di casting in Swift poiché sono molto nuovo a Swift.Converti NSNumber in NSTimeInterval in Swift

Ecco il mio codice:

if let matchDateTime = item["matchDate"].number { 
    _matchDateTime=matchDateTime 
} 

println(_matchDateTime)      
let date = NSDate(timeIntervalSince1970:_matchDateTime) 

ma la sua dandomi l'errore:

Extra argument timeSinceInterval1970 in call 

Non so che cosa è che l'errore, può essere convertito NSNumber-NSTimeInterval ma come? Nessuna idea.

Chiunque possa aiutarmi con questo.

Grazie in anticipo.

+0

È necessario fare clic sul segno di spunta per accettare una delle risposte corrette ti è stato dato L'up-voting è del tutto facoltativo, ma ponendo una domanda ci si aspetta che accetti la migliore risposta data se risponde alla domanda. La mancata accettazione di una risposta corretta è considerata maleducata su SO. –

+0

Devi accettare una delle risposte che ti sono state date o spiegare come non risolvono il tuo problema. La mancata accettazione di una risposta corretta è considerata una pessima forma su SO. –

risposta

5

Prova a trasmettere il tuo NSNumber a un doppio. Questo codice funziona in un parco giochi:

let aNumber: NSNumber = 1234567.89 
let aDate = NSDate(timeIntervalSinceReferenceDate: Double(aNumber)) 
+0

Grazie per l'ottima risposta ... – BeingShashi

+2

Dovresti accettare la risposta mia o di Blake. Entrambi risolvono il tuo problema. Scegli quello con cui ti senti più a tuo agio. –

27

NSTimeInterval è solo un typedaliased Double.

Pertanto colata da NSNumber a NSTimeInterval:

let myDouble = NSNumber(double: 1.0) 
let myTimeInterval = NSTimeInterval(myDouble.doubleValue) 

Edit: Ed è vero il contrario.

let myTimeInterval = NSTimeInterval(1.0) 
let myDouble = NSNumber(double: myTimeInterval) 

Edit 2: Come @DuncanC sottolinea nei commenti qui sotto, si può lanciare direttamente nella chiamata di metodo:

let date = NSDate(timeIntervalSince1970: NSTimeInterval(_matchDateTime)) 
+1

Swift è più gentile del cast tra NSNumber e il numero di scalare rispetto a Objective-C, quindi puoi usare anche la sintassi 'Double (myDouble)' o 'NSTimeInterval (myDouble)' dove 'myDouble' è un NSNumber come nella tua risposta. –

+0

È fantastico che Swift lo gestisca in modo più carino. Continuo a preferire il metodo di cui sopra in quanto è più pulito (IMO) e meno probabilità di rompere con una nuova versione di Swift (poiché utilizza l'API Cocoa stabilita per NSNumber). –

+1

Abbastanza giusto. Preferisco lo stile Swift quando lavoro in Swift. Gusto personale, suppongo. (E penso che le modifiche a una caratteristica di base come il casting di tipo siano estremamente improbabili.) Questa parte della lingua è ben definita.) –