我正在制作一个单位转换器,我正在使用这样的数组:
private var subContentArray = [["Millimeter", "Centimeter", "Meter", "Kilometer", "Foot", "Yard", "Mile"],
["Milliliter", "Centiliter", "Liter", "Gallon", "Quart", "Pint", "Fluid ounce"],
["Milligram", "Centigram", "Gram", "Kilogram", "Stone", "Pound", "Ounce"]]
我正在使用一个设置了 3 个 piker 字段的选择器:
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView.tag == 0 {
currentSelection = row
self.pickerGeneral.text = self.pickerGeneral1[row]
self.view.endEditing(true)
} else if pickerView.tag == 1 {
self.pickerTextField.text = self.pickerSubContent[currentSelection][row]
self.view.endEditing(true)
} else if pickerView.tag == 2 {
self.pickedTextField2.text = self.pickerSubContent[currentSelection][row]
self.view.endEditing(true)
}
}
我想通过通用选择器更改第二个和第三个选择器。到目前为止一切都很好,但后来我想进行计算并且我正在尝试做这样的事情:
func updateOutput(){
//var res: Double
var result: Double
if input.text!.isEmpty {
return
} else if pickerTextField.text! == "Centimeter" && pickedTextField2.text == "Mile" {
result = (Double(self.input.text!)! / 160934.4)
self.output.text! = String("\(result)")
} else if pickerTextField.text! == "Mile" && pickedTextField2.text! == "Centimeter" {
result = (Double(self.input.text!)! * 160934.4)
self.output.text! = String("\(result)")
} else if pickerTextField.text! == "Centimeter" && pickedTextField2.text == "Millimeter" {
result = (Double(self.input.text!)! * 10)
self.output.text! = String("\(result)")
} else if pickerTextField.text! == "Millimeter" && pickedTextField2.text! == "Centimeter" {
result = (Double(self.input.text!)! / 10)
self.output.text! = String("\(result)")
}
...直到我意识到如果我要继续写 if/else if...我不会很快结束,它看起来真的很乱!
我仍然是 OOP 和这个分支的新手,但愿意学习...因此,非常感谢任何帮助,包括示例和解释!!!!
最佳答案
你可以使用字典:
let factors : [(String, String): Double] = [("Centimeter", "Mile"): 1.0/160934.4,
("Mile", "Centimeter"): 160934.4,
<and more...>]
你的函数变成了
func updateOutput(){
if input.text!.isEmpty {
return
}
let result = (Double(self.input.text!)! * factors[(pickerTextField.text, pickerTextField2.text)]
self.output.text! = String("\(result)")
}
(警告:完全未经测试。)
使用通用的基本单元会更好。
let in_meters: [String: Double] = ["Centimeter": 0.01,
"Meter": 1.0,
"Mile": 1609.344,
<and so on...>]
func updateOutput(){
if input.text!.isEmpty {
return
}
let meters = (Double(self.input.text!)! * in_meters[pickerTextField.text]
let result = meters * 1.0 / in_meters[pickerTextField2.text]
self.output.text! = String("\(result)")
}
关于arrays - 丢失一些 if/else if 语句!我应该用什么来代替它们? - swift -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37165293/