gpt4 book ai didi

ios - Strideable.distance(to : A) -> A. Stride in conformance Int64 + 124) 的协议(protocol)见证 - 此错误消息是什么意思?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:54 26 4
gpt4 key购买 nike

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

protocol witness for Strideable.distance(to : A) -> A.Stride in conformance Int64 + 124

这来 self 的代码中无害的一行,如下所示:

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

var1var2 被声明为 Int64 类型,而 THRESHOLD 是:

static let THRESHOLD = 900 * 1000

我有一种预感,这是因为 THRESHOLD 没有被声明为 Int64,尽管我仍然没有假设这会如何导致问题。此外,该错误不可重现,因此我无法验证。

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

最佳答案

混合类型比较可以问题的原因。减法运算符是从其操作数的类型为

@available(swift, deprecated: 3.0, obsoleted: 4.0, message: "Mixed-type subtraction is deprecated. Please use explicit type conversion.")
public func -<T>(lhs: T, rhs: T) -> T.Stride where T : SignedInteger

使用 T == Int64T.Stride == Int。您的代码会导致 Xcode 8.3.2 出现警告消息:

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")
}

在 32 位设备上,Int 的差异可能太大并且上面的示例将因运行时错误而中止

* 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

The solution is to explicitly convert the right-hand side:

if var1 - var2 > Int64(THRESHOLD) { ... }

关于ios - Strideable.distance(to : A) -> A. Stride in conformance Int64 + 124) 的协议(protocol)见证 - 此错误消息是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43631642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com