如何在Swift中将String转换为Function调用

时间:2015-04-18 10:19:58

标签: swift

我正在写一个小应用程序,我想用作计算器。对于计算器的操作员,我开始使用switch语句来例如乘以两个值。因此我创建了一本字典,它工作正常。

我现在发现,如果我写一些类似

的内容,它将非常有用并且可以节省代码
number1 operationButton.currentTitle number2

其中operationButton.currentTitle代表+-*/

我现在的问题是如何将operationButton.currentTitle的字符串转换为这些运算符的函数调用?

2 个答案:

答案 0 :(得分:7)

在Swift中,您可以将函数视为变量 - 例如,您可以将它们存储在字典中。此外,Swift中的运算符只是具有非字母名称的函数(可以使用中缀等)。

这意味着您可以在字典中存储二进制操作:

let operators: [String:(Double,Double)->Double] = [
    "plus":     (+),
    "minus":    (-),
    "divide":   (/),
    "multiply": (*),
]

然后查看这些操作并使用你得到的任何一个,如下:

if let op = operators["divide"] {
    op(3,4)  // returns 0.75
}

答案 1 :(得分:4)

您不应该依赖按钮标题来按顺序拥有某些值 决定执行哪个操作。如果+更改为add,该怎么办? 后来?然后本地化为不同的语言?或按钮没有 标题,只有一个奇特的形象?

更好地将不同的操作连接到每个按钮,例如

@IBAction func addAction(sender: UIButton) {
    // add operands ...
}

@IBAction func subtractAction(sender: UIButton) {
    // subtract operands ...
}

另请注意,不同的运营商要求可能需要不同 错误处理,例如divideAction将检查是否 分母为零。