2015-05-12 2 views
9

Я застрял с каким-то отливом в Swift, поскольку я очень новичок в Swift.Преобразование NSNumber в NSTimeInterval в Swift

Вот мой код:

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

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

но его дает мне ошибку:

Extra argument timeSinceInterval1970 in call 

я не знаю, Что эта ошибка может быть конвертировать NSNumber в NSTimeInterval, но как? Без понятия.

Любой, кто может помочь мне с этим.

Заранее спасибо.

+0

Вам нужно нажать на флажок, чтобы принять один из правильных ответов вам дали. Приостановление голосования является необязательным, но, задавая вопрос, вы должны принять наилучший ответ, если он отвечает на вопрос. Неспособность принять правильный ответ считается грубым на SO. –

+0

Вам нужно принять один из полученных вами ответов или объяснить, как они не решают вашу проблему. Неспособность принять правильный ответ считается очень плохой формой на SO. –

ответ

5

Попробуйте использовать свой NSNumber для двойного использования. Этот код работает в детской площадки:

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

Thanx за отличный ответ ... – BeingShashi

+2

Вы должны принять либо мой, либо ответ Блейка. Оба решения вашей проблемы. Выберите тот, с которым вам удобнее. –

27

NSTimeInterval просто typedaliased Double.

Поэтому литье из NSNumber в NSTimeInterval:

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

Edit: И верно обратное.

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

Edit 2: Как @DuncanC указывает в комментариях ниже, вы можете бросить прямо в вызове метода:

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

Swift лучше относится к кастингу между NSNumber и типами скалярных чисел, чем Objective-C, поэтому вы также можете использовать синтаксис «Double (myDouble)» или «NSTimeInterval (myDouble)», где 'myDouble' является NSNumber, как в вашем ответе. –

+0

Это здорово, что Swift справляется с этим лучше. Я по-прежнему предпочитаю вышеуказанный метод, поскольку он более чист (IMO) и с меньшей вероятностью ломается с новой версией Swift (поскольку он использует установленный API Cocoa для NSNumber). –

+1

Достаточно честный. Я предпочитаю стиль Swift при работе в Swift. По-моему, на вкус. (И я думаю, что изменения в основной функции, такие как кастинг типов, крайне маловероятны. Эта часть языка хорошо определена.) –