NSInteger
(который является типом псевдоним для Int
в Swift) представляет собой 32-битовое целое число на 32-разрядных платформах, как iPhone 5. Результат
NSInteger(NSDate().timeIntervalSince1970) * 1000
является 1480106653342
(в данный момент) и не помещается в диапазон -2^31 ... 2^31-1
из 32-разрядных (подписанных) целых чисел. Поэтому Swift прерывает выполнение. (Swift не «обрежет» результата целого числа арифметических операций, как это делается в некоторых других языках программирования, если вы специально не использовать «перелив» операторов, такие как &*
.)
Вы можете использовать Int64
для 64- разрядные вычисления на все платформы:
Int64(NSDate().timeIntervalSince1970 * 1000)
В вашем случае, если строка нужна:
let lastLogin = String(Int64(NSDate().timeIntervalSince1970 * 1000))
Является ли результат тем же, если вы используете 'Date()' вместо 'NSDate()'? –
На самом деле этот код довольно впечатляющий. Почему вы ссылаетесь на NSInteger в Swift? Или, если это Swift 3, NSDate? – matt
Кроме того, говоря «пользователь!» Означает «сбой меня». Даже если вы считаете, что это не проблема, неспособность проверить, что 'user' не' nil', просто глупо. – matt