两个 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 应该按照你的意思去做。