首页 > 解决方案 > 改进这个简单的 Swift 函数的时间检查,涉及整数到双精度转换和除法

问题描述

据报道,这个看起来很简单的 Swift 函数需要 250 到 300 毫秒来进行类型检查(编译时间)。这使它成为我整个应用程序代码库中类型检查最慢的功能之一,尽管它看起来很简单。

let quotaUsed: Int
let quotaTotal: Int

func isFractionOfQuotaUsed(_ fraction: Double) -> Bool {
    let fractionUsed = Double(quotaUsed) / Double(quotaTotal)
    return fractionUsed >= fraction
}

我试过指定类型fractionUsed,但没有帮助。

Xcode正在报告时间,最好先清理然后再构建以获取时间。

OTHER_SWIFT_FLAGS = -Xfrontend -warn-long-function-bodies=250 -Xfrontend -warn-long-expression-type-checking=250

标签: iosswift

解决方案


我试过你的代码,

let quotaUsed = 10
let quotaTotal = 20

func isFractionOfQuotaUsed(_ fraction: Double) -> Bool {
    let fractionUsed = Double(quotaUsed) / Double(quotaTotal)
    return fractionUsed >= fraction
}

let t1 = Date()
isFractionOfQuotaUsed(0.5)
let t2 = Date()

let time = t2.timeIntervalSince(t1).truncatingRemainder(dividingBy: 1) * 1000

而且它只需要12 ms执行即可。


推荐阅读