两个 swift 函数显着增加了编译时间
Two swift functions increasing compiling time dramatically
回头阅读我的应用程序的构建日志后,似乎出现了一个奇怪的问题,即两个(相对)简单的函数都将编译时间各增加了一分钟(分别为 58 秒和 53 秒)。这可以在我下面的构建日志中看到:
这些函数在我的 CAAgeViewController 中,并且都在我的故事板中引用了一个 UISlider。他们确保最大和最小滑块最多相差 1 年,并且任一函数都将标签设置为“18-24 岁”或类似的东西。它们如下:
@IBAction func minAgeChanged(_ sender: UISlider) {
if round(minAgeSlider.value / 1) < round(maxAgeSlider.value / 1) - 1 {
minAgeSlider.value = round(minAgeSlider.value / 1)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
} else {
minAgeSlider.value = round(maxAgeSlider.value / 1) - 1
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
}
}
@IBAction func maxAgeChanged(_ sender: UISlider) {
if round(maxAgeSlider.value / 1) > round(minAgeSlider.value / 1) + 1 {
maxAgeSlider.value = round(maxAgeSlider.value / 1)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
} else {
maxAgeSlider.value = round(minAgeSlider.value / 1) + 1
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
}
}
我不确定这里到底出了什么问题。感谢您的帮助!
您是否尝试过删除除以 1 并将您的值转换为 Double?请注意,他们可能已经是双打了。您可能只需要调用 round().
速度变慢的最可能原因是您将字符串与 +
连接的方式。出于某种我无法弄清楚的原因,使用 "\(string1) \(string2)"
追加字符串要比 快 多(至少在 Swift 2/3)使用 string1 + string2
。数组及其 +
运算符也是如此。当我们改变我们进行连接的方式时,我们看到编译时间减少了 100 倍。
你的问题是chained-plus。 (它始终是链式加号;好吧,不是 总是,而是总是……)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
将其替换为:
ageLabel.text = "\(Int(round(minAgeSlider.value)))-\(Int(round(maxAgeSlider.value))) Years"
我很确定 /1
对您没有帮助。 round
+ Int
应该按照你的意思去做。
回头阅读我的应用程序的构建日志后,似乎出现了一个奇怪的问题,即两个(相对)简单的函数都将编译时间各增加了一分钟(分别为 58 秒和 53 秒)。这可以在我下面的构建日志中看到:
这些函数在我的 CAAgeViewController 中,并且都在我的故事板中引用了一个 UISlider。他们确保最大和最小滑块最多相差 1 年,并且任一函数都将标签设置为“18-24 岁”或类似的东西。它们如下:
@IBAction func minAgeChanged(_ sender: UISlider) {
if round(minAgeSlider.value / 1) < round(maxAgeSlider.value / 1) - 1 {
minAgeSlider.value = round(minAgeSlider.value / 1)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
} else {
minAgeSlider.value = round(maxAgeSlider.value / 1) - 1
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
}
}
@IBAction func maxAgeChanged(_ sender: UISlider) {
if round(maxAgeSlider.value / 1) > round(minAgeSlider.value / 1) + 1 {
maxAgeSlider.value = round(maxAgeSlider.value / 1)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
} else {
maxAgeSlider.value = round(minAgeSlider.value / 1) + 1
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
}
}
我不确定这里到底出了什么问题。感谢您的帮助!
您是否尝试过删除除以 1 并将您的值转换为 Double?请注意,他们可能已经是双打了。您可能只需要调用 round().
速度变慢的最可能原因是您将字符串与 +
连接的方式。出于某种我无法弄清楚的原因,使用 "\(string1) \(string2)"
追加字符串要比 快 多(至少在 Swift 2/3)使用 string1 + string2
。数组及其 +
运算符也是如此。当我们改变我们进行连接的方式时,我们看到编译时间减少了 100 倍。
你的问题是chained-plus。 (它始终是链式加号;好吧,不是 总是,而是总是……)
ageLabel.text = String(Int(round(minAgeSlider.value / 1))) + "-" + String(Int(round(maxAgeSlider.value / 1))) + " Years"
将其替换为:
ageLabel.text = "\(Int(round(minAgeSlider.value)))-\(Int(round(maxAgeSlider.value))) Years"
我很确定 /1
对您没有帮助。 round
+ Int
应该按照你的意思去做。