计算多个uitextfields结果的最佳方法

时间:2017-01-15 03:09:10

标签: ios swift uitextfield

我正在实施一个应用程序,它有一个按钮,可以对4个uitextfields的内容求和。我的问题是“如何知道哪些uitextfields是空的?”

我想确保在按下按钮时没有uitextfield,如果它有值,则不会被忽略。 一个正常的if语句可以做到吗?例如:

if(textfield1 is not empty && textfield2 is not empty &&... && textfield4 is not empty) {

// add them together

}else if (choose one textfield to check if its empty) {

// sign the empty textfield to 0 and add the rest

} else if (choose another textField to check if its empty) {

// sign the empty textfield to 0 and add the rest

}

.

.

.

// end of button block

对我而言,这种方法在逻辑上和编程上都不是一个好方法。

实现这项任务的最佳方法是什么?

感谢

2 个答案:

答案 0 :(得分:2)

您可以充分利用 nil coalescing operator ??来处理文本字段为空或不包含合法值的情况:

let value1 = Int(textfield1.text ?? "") ?? 0
let value2 = Int(textfield2.text ?? "") ?? 0
let value3 = Int(textfield3.text ?? "") ?? 0
let value4 = Int(textfield4.text ?? "") ?? 0
let sum = value1 + value2 + value3 + value4

或者对于功能方法,收集数组文字中的textfield并使用flatMapreduce转换值并生成总和:

let values = [textfield1, textfield2, textfield3, textfield4].flatMap({$0.text}).flatMap({Int($0)})
let sum = values.reduce(0, +)

答案 1 :(得分:1)

另一种方法是将文本字段添加到数组并循环遍历它。对于越来越多的文本字段,这可以更好地扩展。请记住,此示例假设您使用的值可能包含小数,但为Int执行此操作也可以。

var textField1 = UITextField()
var textField2 = UITextField()
var textField3 = UITextField()
var textField4 = UITextField()
var textFields = [UITextField]()

override func viewDidLoad() {
    super.viewDidLoad()
    textFields = [textField1, textField2, textField3, textField4]
}

@IBAction func sumButtonPressed(sender: UIButton){
    var sum = 0.0
    for textField in textFields {
        if let number = Double(textField.text!) { //checks that it is not nil AND a Double
            sum += number
        }
    }
}

如果你只是使用textFields数组一次(即只是在sumButtonPressed函数中),那么你可能只想初始化该函数中的变量,如@Adrian所说:

@IBAction func sumButtonPressed(sender: UIButton){
    let textFields = [textField1, textField2, textField3, textField4]
    var sum = 0.0
    for textField in textFields {
        if let number = Double(textField.text!) { //checks that it is not nil AND a Double
            sum += number
        }
    }
}