arrays - 丢失一些 if/else if 语句!我应该用什么来代替它们? - swift -

标签 arrays swift if-statement nested

我正在制作一个单位转换器,我正在使用这样的数组:

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/

相关文章:

swift - NSTextfield 的背景色

Perl 条件不替代标量值

c++ - 与普通 cout 的行为相比,为什么 c++ 中的 for 循环访问未初始化的内存位置?

java - 二维数组的相邻值 (java)

java - JSONArray 名称值对修改

ios - 如何通过 AppDelegate 升级使功能可用于大于 8 的 iOS

ios - 有人可以解释为什么我不能从此方法返回值吗?

r - 带有 ifelse 和两个对象的自定义函数需要以动态方式从正确的列中读取 R

python - 如何在图表中运行 elif 函数?

c - 使用 IN/OUT 标志每行显示一个字符串