Swift 仅在iPhone 5模拟器中执行错误指令
在iPhone5模拟器上运行我的代码会引发如图所示的异常。 在任何其他模拟器上运行代码都可以 我不知道我在这一行不起眼的代码中犯了什么错误。 还有其他人有这个问题吗Swift 仅在iPhone 5模拟器中执行错误指令,swift,ios-simulator,ios10,Swift,Ios Simulator,Ios10,在iPhone5模拟器上运行我的代码会引发如图所示的异常。 在任何其他模拟器上运行代码都可以 我不知道我在这一行不起眼的代码中犯了什么错误。 还有其他人有这个问题吗 NSInteger(Swift中Int的类型别名)是32位 32位平台上的整数,如iPhone 5。 结果 NSInteger(NSDate().timeIntervalSince1970) * 1000 是1480106653342(此时),不适合 范围-2^31。。。32位(有符号)整数的2^31-1。 因此Swift中止执行
NSInteger
(Swift中Int
的类型别名)是32位
32位平台上的整数,如iPhone 5。
结果
NSInteger(NSDate().timeIntervalSince1970) * 1000
是1480106653342
(此时),不适合
范围-2^31。。。32位(有符号)整数的2^31-1
。
因此Swift中止执行。(Swift不会“截断”
整数算术运算的结果,在某些情况下是这样做的
其他编程语言,除非您特别使用
“溢出”运算符,如和*
)
您可以在所有平台上使用Int64
进行64位计算:
Int64(NSDate().timeIntervalSince1970 * 1000)
在您的情况下,如果需要字符串:
let lastLogin = String(Int64(NSDate().timeIntervalSince1970 * 1000))
如果使用
Date()
而不是NSDate()
,结果是否相同?事实上,这段代码非常壮观。你为什么在Swift中提到NSInteger?或者,如果这是Swift 3,到NSDate?也就是说,user代码>表示“撞毁我”。即使您认为这不是问题所在,但如果不检查用户
是否为nil
也是愚蠢的。此外,我当然希望configureDatabase()
不依赖于您在期间所做的任何事情,因为configureDatabase
首先执行,在self.refuers
设置之前。@matt我对swift和ios开发人员是新手。阅读博客和stackoverflow我想到了这个。该函数只为数据库更改设置一些侦听器。Firebase在数据库()内处理初始化。感谢用户提供的提示。我想我以后会改变的。我不知道关于32位和64位平台的事情,但我会尝试一下。谢谢你关于平台差异的提示。这一点让我明白了为什么它不起作用。使用我们给出的建议对我没有帮助,因为firebase一开始就不喜欢Int64。为了获得Epoc(1970)以来的毫秒数,我提出了round(NSDate()。timeintervalnce1970*1000@Dreanaught:您仍然可以将其转换为字符串,就像您在原始代码中所做的那样,请参阅更新的答案。实际上,没有。结果表明,该值保存为字符串,而不是我最初想要的数字类型(没有小数点)。