Do-Catch和溢出

时间:2017-02-02 12:49:10

标签: swift do-catch

如何包装do catch溢出错误

    let increasePerSecond: UInt32 = UInt32.max 
    let offset: UInt32
    do {
        offset = try ((nowTimeInterval - calculatedTimeInterval) * increasePerInterval)
    } catch _ {
        offset = 0
    }

但是如果我在do部分出错,我就没有进入catch而且我的应用程序崩溃了

UPD :它不是关于如何获得var offset,问题是如何处理错误

1 个答案:

答案 0 :(得分:2)

整数运算溢出不会throw出错,因此你不能catch它。如果你 想要检测并处理溢出,你可以使用其中一个...WithOverflow 整数类型的方法。例如:

let a = UInt32.max
let b = UInt32(2)

if case let (result, overflow) = UInt32.multiplyWithOverflow(a, b), !overflow {
    print(result)
} else {
    print("overflow")
}