【问题标题】:Why is my UIpickerView now taking my builds 3 hours to complete?为什么我的 UIpickerView 现在需要 3 个小时才能完成构建?
【发布时间】:2019-09-09 13:42:53
【问题描述】:

我在 xcode 10.3 中创建了一个应用程序,它可以快速有效地计算出 9 个变量来给出 5 个结果。要选择变量,它是通过一个 9 轮选择器视图。

我在下面的一些示例代码中添加了所有变量,它运行完美,给出了正确的结果。但是构建时间最多需要三个小时......这是我做错了吗?

正如下面的代码所示,一旦 didSelectRow 开始变得忙碌,那么构建时间就非常紧迫。大约有 300 多个“if”语句涵盖了 pickerView 中的变量。

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        let runway = runwaydataSource[pickerView.selectedRow(inComponent: 0)]
        let flap = flapdataSource[pickerView.selectedRow(inComponent: 1)]
        let wght = weightdataSource[pickerView.selectedRow(inComponent: 2)]
        let alt = altdataSource[pickerView.selectedRow(inComponent: 3)]
        let wind = winddataSource[pickerView.selectedRow(inComponent: 4)]
        let slope = slopedataSource[pickerView.selectedRow(inComponent: 5)]
        let temp = tempdataSource[pickerView.selectedRow(inComponent: 6)]
        let vref = vrefdataSource[pickerView.selectedRow(inComponent: 7)]
        let rev = revdataSource[pickerView.selectedRow(inComponent: 8)]

        runwaylabel.text = "\(runway)"
        flaplabel.text = "\(flap)°"
        weightlabel.text = "\(wght)kg"
        altlabel.text = "\(alt)ft"
        windlabel.text = "\(wind)kts"
        slopelabel.text = "\(slope)°"
        templabel.text = "\(temp)°C"
        vreflabel.text = "\(vref)kts"
        revlabel.text = "\(rev)"

        // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        // :::::::::: FLAP REF ADJUSTMENT CALCULATION (DRY) ::::::::::::
        // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

        if runwaylabel.text == "Dry" && flaplabel.text == "20°" {
            flaprefadjust.text = "\(1465)"
            flaprefadjustmax.text = "\(2000)"
            flaprefadjust4.text = "\(2590)"
            flaprefadjust3.text = "\(3050)"
            flaprefadjust2.text = "\(3340)"
            flaprefadjust1.text = "\(3595)"
        }

        else if runwaylabel.text == "Dry" && flaplabel.text == "25°" {
            flaprefadjust.text = "\(1360)"
            flaprefadjustmax.text = "\(1820)"
            flaprefadjust4.text = "\(2335)"
            flaprefadjust3.text = "\(2745)"
            flaprefadjust2.text = "\(3005)"
            flaprefadjust1.text = "\(3240)"
        }
        else if runwaylabel.text == "Dry" && flaplabel.text == "30°" {
            flaprefadjust.text = "\(1300)"
            flaprefadjustmax.text = "\(1705)"
            flaprefadjust4.text = "\(2175)"
            flaprefadjust3.text = "\(2545)"
            flaprefadjust2.text = "\(2805)"
            flaprefadjust1.text = "\(3035)"
        }

        else if runwaylabel.text == "Good" && flaplabel.text == "20°" {
            flaprefadjust.text = "\(2035)"
            flaprefadjustmax.text = "\(2115)"
            flaprefadjust4.text = "\(2595)"
            flaprefadjust3.text = "\(3050)"
            flaprefadjust2.text = "\(3340)"
            flaprefadjust1.text = "\(3595)"
        }

        else if runwaylabel.text == "Good" && flaplabel.text == "25°" {
            flaprefadjust.text = "\(1865)"
            flaprefadjustmax.text = "\(1935)"
            flaprefadjust4.text = "\(2350)"
            flaprefadjust3.text = "\(2745)"
            flaprefadjust2.text = "\(3005)"
            flaprefadjust1.text = "\(3240)"
        }
        else if runwaylabel.text == "Good" && flaplabel.text == "30°" {
            flaprefadjust.text = "\(1775)"
            flaprefadjustmax.text = "\(1835)"
            flaprefadjust4.text = "\(2180)"
            flaprefadjust3.text = "\(2545)"
            flaprefadjust2.text = "\(2805)"
            flaprefadjust1.text = "\(3035)"
        }


        let flaprefadjustresult = NSString(string: flaprefadjust.text!).doubleValue
        let flaprefadjustresultmax = NSString(string: flaprefadjustmax.text!).doubleValue
        let flaprefadjustresult4 = NSString(string: flaprefadjust4.text!).doubleValue
        let flaprefadjustresult3 = NSString(string: flaprefadjust3.text!).doubleValue
        let flaprefadjustresult2 = NSString(string: flaprefadjust2.text!).doubleValue
        let flaprefadjustresult1 = NSString(string: flaprefadjust1.text!).doubleValue

        // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        // :::::::::: WEIGHT ADJUSTMENT CALCULATIONS (DRY) :::::::::::::
        // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

        if runwaylabel.text == "Dry" && flaplabel.text == "20°" && weightlabel.text == "340,000kg" {
            weightadjust.text = "\(630)"
            weightadjustmax.text = "\(450)"
            weightadjust4.text = "\(630)"
            weightadjust3.text = "\(810)"
            weightadjust2.text = "\(900)"
            weightadjust1.text = "\(1170)"
        }
        else if runwaylabel.text == "Dry" && flaplabel.text == "20°" && weightlabel.text == "335,000kg"{
            weightadjust.text = "\(595)"
            weightadjustmax.text = "\(425)"
            weightadjust4.text = "\(595)"
            weightadjust3.text = "\(765)"
            weightadjust2.text = "\(850)"
            weightadjust1.text = "\(1105)"
        }
        else if runwaylabel.text == "Dry" && flaplabel.text == "20°" && weightlabel.text == "330,000kg"{
            weightadjust.text = "\(560)"
            weightadjustmax.text = "\(400)"
            weightadjust4.text = "\(560)"
            weightadjust3.text = "\(720)"
            weightadjust2.text = "\(800)"
            weightadjust1.text = "\(1040)"
        }

【问题讨论】:

    标签: swift xcode compilation


    【解决方案1】:

    注释掉这个方法会使项目编译得更快吗?

    除此之外,上面的代码中还有很多不好的做法, 您的逻辑可能应该分成某种“控制器对象”, 所有这些减速和初始化似乎都非常恒定,不需要在每次调用此方法时都发生。

    与“30o”等的字符串比较感觉很奇怪,为什么不使用底层值呢?

    您可以快速阅读有关“模式匹配 switch 语句”的主题。

    一个好的枚举会很好地清理这段代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 2013-02-06
      相关资源
      最近更新 更多