Strideable.distance的协议见证(至:A) - > A.符合一致性Int64 + 124 - 这个错误信息是什么意思?

时间:2017-04-26 10:30:57

标签: ios swift swift-protocols

我从iTunesConnect获得了一堆崩溃日志,用于我的ios swift应用程序,堆栈跟踪顶部显示错误消息:

  

Strideable.distance的协议见证(至:A) - > A.遵循Int64 + 124

这来自我的代码中的无关紧要的行,如下所示:

if (var1 - var2 > MyClass.THRESHOLD) {
    // Do something
}

var1var2声明属于Int64,而THRESHOLD则为:

static let THRESHOLD = 900 * 1000

我预感到这是因为THRESHOLD未被宣布为Int64,但我仍然没有假设这可能导致问题。此外,该错误是不可重现的,所以我无法验证。

有关此错误消息的含义的任何帮助,以及可能存在的问题?

1 个答案:

答案 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 )  ) ;"