我遇到了这段代码而不确定它是如何执行操作的,例如(*,+, - ,%)。有人可以解释它是如何知道的,例如必须添加两个数字吗?
var operandStack = Array<Double>()
switch operation {
case "×": performOperation { $0 * $1 }
case "+": performOperation { $0 + $1 }
func performOperation(operation: (Double, Double)->Double)
{
displayValue=operation(operandStack.removeLast(),
operandStack.removeLast())
}
var displayValue: Double
{
set {
display.text = "\(newValue)"
}
get {
return NSNumberFormatter().numberFromString
(display.text!)!.doubleValue
}
}
答案 0 :(得分:2)
在Swift中,表达式
{ $0 * $1 }
是一个函数(技术上是closure expression),它将第一个参数乘以第二个参数。参数从零开始编号。
该函数与类型(Double, Double)->Double
兼容(注意类型推断的强大功能),因此可以传递给performOperation
。
以下是Swift开发人员指南中的更多信息:
速记参数名称
Swift自动为内联闭包提供简写参数名称,可用于通过名称$ 0,$ 1,$ 2等来引用闭包参数的值。
如果在闭包表达式中使用这些简写参数名称,则可以从其定义中省略闭包的参数列表,并且将从期望的函数类型推断出简写参数名称的数量和类型。也可以省略in关键字,因为闭包表达式完全由其主体组成:
反转=排序(名称,{$ 0&gt; $ 1})
这里,$ 0和$ 1引用闭包的第一个和第二个String参数。