2014-06-09 2 views
4

Нечетная вещь происходит здесь. Следующий код:Быстрый код в игровой площадке против фактического класса

String(Int(date.timeIntervalSince1970*1000)) 

работает на детской площадке, но не в своем классе. Он вылетает с EXC_BAD_INSTRUCTION.

Любые идеи, почему? В качестве альтернативы, как мне получить строку выше NSTimeInterval?

Заранее благодарен!

Редактировать: Мне нужен результат как Int, поэтому 1402324472549, а не 1402324472549.64, например.

+0

В [Дэвид Берри] (http://stackoverflow.com/a/24124703/1548472) s ответ ниже, он делает интересное различие детская площадка, находящаяся в классах с 64-битной землей и классами, находится на 32-битной территории. – holroy

ответ

4

Внутри определения класса:

var date = NSDate() 
let myDateString = String(Int64(date.timeIntervalSince1970()*1000)) 
println("Seconds = \(myDateString)") 
2

Не уверен в первопричине, но это как-то связано с преобразованием типа. Это работает:

var date = NSDate() 
var asString = "\(Int(date.timeIntervalSince1970*1000))" 
println(asString) 
+0

Это работает, но это дает мне 1402324472549.64, тогда как мне нужно 1402324472549. Это был смысл конвертации в Int :-). –

+0

@StelianIancu - см. Обновление – ColinE

+0

Сбой также :-(. Это работает для вас? (В классе, а не на детской площадке). –

2

Катастрофа происходит потому, что вы переполнены 32-разрядный Int и Свифт по умолчанию делает граничную проверку всех операций. Попробуйте:

"\(floor(date.timeIntervalSince1970)" 
+0

этаж по-прежнему дает мне .0 Int64 работал. Что мне показалось интересным, так это то, что в игровая площадка работает, т. е. дает правильный результат. –

+2

на игровой площадке, на которой вы работаете на 64-битной земле, что означает, что Int 64-бит, поэтому переполнение не происходит. –

+0

Ах, не понимал этого. это из. –

Смежные вопросы