如何忽略已经在swift 3中计算过的UITextField的值?

时间:2017-01-26 11:00:25

标签: ios swift uitextfield

我试图创建一个非常基本的应用程序。该应用程序的一部分是有4个textFields和一个计算这些textFields之和的按钮。 我面临的问题是,我在第一个textField中键入值10然后按下按钮。结果将是10.但是,如果我再次按下它(没有在其他textFields中输入任何内容),结果将是20 !!此外,如果我在其中一个textFields中键入20,结果将是40 !! 结果应该是30不是40! 我想到的一个可能选项(尚未尝试过)在按下按钮时为所有textField分配0。但我希望该应用程序更智能,并跟踪结果。

如果有帮助,按钮内的代码计算总和:

 @IBAction func calBtnPressed(_ sender: UIButton) {
        var benifit:[Double] = []

    var textFields: [Double] = []



    if initialBalance.text?.isEmpty ?? true {

             // do nothing

    } else {

        if let temp = initialBalance.text {

            // these lines of code will convert arabic numbers to English ones in case the user uses Arabic number

            let initialStr: String = temp
            let initialFormatter: NumberFormatter = NumberFormatter()
            initialFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
            let initialFinal = initialFormatter.number(from: initialStr)
            benifit.append(Double(initialFinal!))
        }
    }



    if income.text?.isEmpty ?? true {

        // do nothing


    } else {

        if let temp = income.text {

        // these lines of code will convert Arabic numbers to English ones in case the user uses Arabic number

            let incomeStr: String = temp
            let incomeFormatter: NumberFormatter = NumberFormatter()
            incomeFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
            let incomeFinal = incomeFormatter.number(from: incomeStr)
             benifit.append(Double(incomeFinal!))
        }
    }



    if salaries.text?.isEmpty ?? true {

        // do nothing


    } else {

        if let temp = salaries.text {

            let salariesStr: String = temp
            let salariesFormatter: NumberFormatter = NumberFormatter()
            salariesFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
            let salariesFinal = salariesFormatter.number(from: salariesStr)
            textFields.append(Double(salariesFinal!))
        }
    }


    if tools.text?.isEmpty ?? true {

        // do nothing

    } else {

        if let temp = tools.text {

            let toolsStr: String = temp
            let toolsFormatter: NumberFormatter = NumberFormatter()
            toolsFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
            let toolsFinal = toolsFormatter.number(from: toolsStr)
            textFields.append(Double(toolsFinal!))
        }
    }



    if maintinance.text?.isEmpty ?? true {

        // do nothing

    } else {

        if let temp = maintinance.text {

            let maintinanceStr: String = temp
            let maintinanceFormatter: NumberFormatter = NumberFormatter()
            maintinanceFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
            let maintinanceFinal = maintinanceFormatter.number(from: maintinanceStr)
            textFields.append(Double(maintinanceFinal!))
        }
    }


    if other.text?.isEmpty ?? true {

        // do nothing


    } else {

        if let temp = other.text {

        let otherStr: String = temp
        let otherFormatter: NumberFormatter = NumberFormatter()
        otherFormatter.locale = NSLocale(localeIdentifier: "EN") as Locale!
        let otherFinal = otherFormatter.number(from: otherStr)
        textFields.append(Double(otherFinal!))
        }
    }

    for textField in textFields {

        sumExpenses += textField
    }

    for ben in benifit{

        sumBenifit += ben
    }

    totalExpenses.text =  String(sumExpenses)

     totalAfterSubtractingExpenses.text = String( sumBenifit - sumExpenses )

    sumBenifit -= sumExpenses

}

1 个答案:

答案 0 :(得分:2)

我想我找到了你的问题。

使用未在func中声明的变量sumBenefit,所以我假设它在你的UIViewController中声明。

由于它是一个实例变量,因此每次单击按钮时都不会重置。

如果您想在每次按下按钮时重置sumExpensessumBenefits的值,那么您必须执行以下操作:

sumExpenses = 0
for textField in textFields {
    sumExpenses = Int(textField.text)!
}

sumBenefit = 0
for ben in benefit {
    sumBenefit += ben 
}

我也假设你想在第一个for循环中使用textField中的数字,因为如果sumExpenses的类型为Int(或其他任何数字),那么{ {1}}将无法编译。您需要获取sumExpenses += textField的文字并将其转换为textField

同样,我仍然不是很清楚你想要做什么,但如果这对你有用,或者你需要进一步澄清,请告诉我。