我从iTunesConnect获得了一堆崩溃日志,用于我的ios swift应用程序,堆栈跟踪顶部显示错误消息:
Strideable.distance的协议见证(至:A) - > A.遵循Int64 + 124
这来自我的代码中的无关紧要的行,如下所示:
if (var1 - var2 > MyClass.THRESHOLD) {
// Do something
}
var1
和var2
声明属于Int64
,而THRESHOLD
则为:
static let THRESHOLD = 900 * 1000
我预感到这是因为THRESHOLD
未被宣布为Int64
,但我仍然没有假设这可能导致问题。此外,该错误是不可重现的,所以我无法验证。
有关此错误消息的含义的任何帮助,以及可能存在的问题?
答案 0 :(得分:2)
混合型比较可以 问题的原因。从中推断出减法运算符 其操作数的类型为
T.Stride == Int
let THRESHOLD = 900 * 1000
let var1: Int64 = 0x100000000
let var2: Int64 = 0
// warning: '-' is deprecated: Mixed-type subtraction is deprecated. Please use explicit type conversion.
if var1 - var2 > THRESHOLD {
print("foo")
} else {
print("bar")
}
和Int
。您的代码将导致Xcode 8.3.2的警告消息:
if var1 - var2 > Int64(THRESHOLD) { ... }
在32位设备上,CurrentDb.Execute "INSERT INTO Transaction (RoomNumber,GuestID)" _
& " VALUES ('" & RoomNum & "','SELECT Max([GuestID]) FROM [Guest]' );"
的差异可能太大
以上示例将中止运行时错误
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) frame #0: 0x0223d428 libswiftCore.dylib`protocol witness for Swift.Strideable.distance (to : A) -> A.Stride in conformance Swift.Int64 : Swift.Strideable in Swift + 72
解决方案是明确转换右侧:
, SELECT GuestID FROM [Guest] WHERE GuestID =( SELECT max([GuestID]) FROM Guest ) ) ;"