ios - 改进这个简单的 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
解决方案
我试过你的代码,
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
执行即可。
推荐阅读
- django - 如何在另一个html中获取记录的ID?
- javascript - 根据查询字符串交换数据值
- javascript - 基于路由参数的服务器端渲染动态页面
- r - 如何加快 R 过程以确定 22 个生物气候变量中的多重共线性?
- python - 在 Web 表 Selenium + Python 中使用定位器比较元素
- python-2.7 - Python 错误 - 计算特征几何
- django - Django 文件浏览器可以上传文件但无法打开文件并出现 404 错误
- xamarin - 为什么 ViewRender 的 OnTouchEvent() 覆盖方法没有触发?
- r - R使用需要两个变量的未命名函数的映射
- python - PyGreSQL 为单列选择语句返回意外结果