我正在实施一个应用程序,它有一个按钮,可以对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
对我而言,这种方法在逻辑上和编程上都不是一个好方法。
实现这项任务的最佳方法是什么?
感谢
答案 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
并使用flatMap
和reduce
转换值并生成总和:
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
}
}
}