快速帮助,请解释此代码的工作原理

时间:2015-02-07 19:40:55

标签: swift ios8

我遇到了这段代码而不确定它是如何执行操作的,例如(*,+, - ,%)。有人可以解释它是如何知道的,例如必须添加两个数字吗?

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
    }
} 

1 个答案:

答案 0 :(得分:2)

在Swift中,表达式

{ $0 * $1 }

是一个函数(技术上是closure expression),它将第一个参数乘以第二个参数。参数从零开始编号。

该函数与类型(Double, Double)->Double兼容(注意类型推断的强大功能),因此可以传递给performOperation

以下是Swift开发人员指南中的更多信息:

  

速记参数名称

     

Swift自动为内联闭包提供简写参数名称,可用于通过名称$ 0,$ 1,$ 2等来引用闭包参数的值。

     

如果在闭包表达式中使用这些简写参数名称,则可以从其定义中省略闭包的参数列表,并且将从期望的函数类型推断出简写参数名称的数量和类型。也可以省略in关键字,因为闭包表达式完全由其主体组成:

     

反转=排序(名称,{$ 0&gt; $ 1})

     

这里,$ 0和$ 1引用闭包的第一个和第二个String参数。