EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码=为0x0)上迅速

EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码=为0x0)上迅速

问题描述:

我与SwiftMoment 遇到这个问题,在这部分代码https://github.com/akosma/SwiftMomentEXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子码=为0x0)上迅速

public func moment(_ timetoken: Int64) -> Moment { 
    return moment(Int(timetoken/10000)) 
} 

我不知道为什么它happenning。如果您有任何见解,请随时分享。 谢谢!

enter image description here

这里是timetoken值: timetoken 14915504189961350

它发生在模拟器 MacOS的塞拉利昂10.12.4

的Xcode 8.3.1 的iOS 10.3.1 iPhone 5

更新

问题犯规出现在iPhone 7

+1

public func moment(_ seconds: TimeInterval) -> Moment 

代替你有完整的堆栈跟踪吗? – kennytm

+0

我有点新xcode。我已添加更多信息。我如何分享完整的堆栈跟踪? –

+0

'timetoken'的价值是什么?错误发生在哪里? Mac/iOS设备/模拟器? 32位或64位平台? –

的iPhone 5是一个32位的装置,这意味着Int is a 32-bit integer,和timetoken/10000结果不适合放入一个 Int。与其他一些编程语言相比,整数溢出在Swift中是致命的运行时错误(这很好,因为否则 你只会得到错误的结果)。

我会建议值转换为TimeInterval,而不是 (这是一个浮点类型,实际上只是为Double一个类型别名),然后调用

public func moment(_ milliseconds: Int) -> Moment