两个快速的函数显着增加了编译时间

时间:2017-06-28 21:25:01

标签: ios swift uislider

回过头来阅读我的应用程序的构建日志后,似乎有一个奇怪的问题,即两个(相对)简单的函数都将编译时间分别增加一分钟(分别为58和53秒)。这可以在我的构建日志中看到:

enter image description here

这些函数在我的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"
    }
}

我不确定这里到底出了什么问题。任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:4)

你的问题是链式加。 (它总是链式加上;好吧,不是总是但总是......)

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应该做你想要的一切。

答案 1 :(得分:3)

减速的最可能原因是您使用+连接字符串的方式。由于某种原因,我无法弄明白,它更快<(>至少在Swift 2/3中)以"\(string1) \(string2)"追加字符串而不是更快 使用string1 + string2。数组及其+运算符也是如此。当我们改变了连接方式时,我们看到编译时间缩短了100倍。

答案 2 :(得分:1)

您是否尝试将除法除1并将值转换为Double?考虑到你,他们可能已经是双打。你可能只需要调用round()。