Swift 一定要抓住并溢出
如何包装Swift 一定要抓住并溢出,swift,do-catch,Swift,Do Catch,如何包装do捕获溢出错误 let increasePerSecond: UInt32 = UInt32.max let offset: UInt32 do { offset = try ((nowTimeInterval - calculatedTimeInterval) * increasePerInterval) } catch _ { offset = 0 } 但如果我在do部分出错,我就不会进入catch并使我的
do
捕获溢出错误
let increasePerSecond: UInt32 = UInt32.max
let offset: UInt32
do {
offset = try ((nowTimeInterval - calculatedTimeInterval) * increasePerInterval)
} catch _ {
offset = 0
}
但如果我在do
部分出错,我就不会进入catch
并使我的应用程序崩溃
UPD:问题不在于如何获得var偏移量,问题是如何处理错误?整数算术中的溢出不会抛出错误,因此您无法捕获它。如果你
要检测和处理溢出,可以使用…WithOverflow
整数类型的方法。例如:
let a = UInt32.max
let b = UInt32(2)
if case let (result, overflow) = UInt32.multiplyWithOverflow(a, b), !overflow {
print(result)
} else {
print("overflow")
}
您是否尝试过将((nowTimeInterval-calculatedTimeInterval)*increasePerInterval)
显式转换为UInt32?问题不在于如何获得var偏移量,而在于如何处理错误您应该让问题更清楚。很难理解你的实际问题是什么。例如,“处理错误”可能和打印错误一样简单,所以我怀疑这就是你的意思。双精度类型如何?@EvGeniyIlyin:如果浮点乘法溢出,则结果为“inf”,因此你可以检查If result.isFinite