2015-05-12 26 views
9

Ich bin mit einer Art von Gießen in Swift fest, wie ich Swift bin sehr neu.Convert NSNumber in NSTimeInterval in Swift

Hier ist mein Code:

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

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

aber sein mir den Fehler geben:

Extra argument timeSinceInterval1970 in call 

Ich weiß nicht, was ist, dass Fehler, sein NSNumber-NSTimeInterval konvertieren kann, aber wie? Keine Ahnung.

Jeder, der mir dabei helfen kann.

Vielen Dank im Voraus.

+0

Sie müssen das Häkchen, um auf eine der richtigen Antworten akzeptieren Du wurdest gegeben. Up-Voting ist völlig optional, aber wenn Sie eine Frage stellen, wird von Ihnen erwartet, dass Sie die beste Antwort erhalten, wenn Sie die Frage beantworten. Eine korrekte Antwort nicht zu akzeptieren, wird als unhöflich auf SO betrachtet. –

+0

Sie müssen eine der Antworten, die Ihnen gegeben wurden, akzeptieren oder erklären, wie sie Ihr Problem nicht lösen. Wenn man eine korrekte Antwort nicht akzeptiert, wird dies als sehr schlecht auf SO betrachtet. –

Antwort

5

Versuchen Sie, Ihre NSNumber zu einem Double zu konvertieren. Dieser Code funktioniert auf einem Spielplatz:

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

Danke für die tolle Antwort ... – BeingShashi

+2

Sie sollten entweder meine oder Blakes Antwort akzeptieren. Beide lösen dein Problem. Wählen Sie den, mit dem Sie sich wohler fühlen. –

27

NSTimeInterval ist nur ein typedaliased Double.

daher von NSNumber zu NSTimeInterval Gießen:

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

Edit: Und das Gegenteil ist der Fall.

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

Edit 2: Wie @DuncanC in den Kommentaren unten weist darauf hin, können Sie direkt in den Methodenaufruf Stimmen:

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

Swift ist beim Umwandeln zwischen NSNumber- und Skalartypen besser als Objective-C, daher können Sie auch die Syntax 'Double (myDouble)' oder 'NSTimeInterval (myDouble)' verwenden, wobei 'myDouble' eine NSNumber wie in Ihrer Antwort ist. –

+0

Das ist toll, dass Swift das auf eine bessere Art und Weise angeht. Ich bevorzuge immer noch die oben genannte Methode, da es sauberer (IMO) ist und weniger wahrscheinlich mit einer neuen Version von Swift bricht (wie es die etablierte Cocoa API für NSNumber verwendet). –

+1

Fair genug. Ich bevorzuge den Swift-Stil, wenn ich in Swift arbeite. Persönlicher Geschmack, nehme ich an. (Und ich denke, dass Änderungen an einem Kernmerkmal wie Typcasting äußerst unwahrscheinlich sind. Dieser Teil der Sprache ist gut definiert.) –