这个Swift代码会发生什么

时间:2017-04-23 13:59:44

标签: swift dictionary enums switch-statement

我正在查看这段代码,它创建了一个枚举和一个使用枚举的字典,后来在字典上开了一个开关。

这是斯坦福CS193P计算器课程的解决方案。枚举中的一个案例包含此代码。

case binaryOperation(Double, Double) -> Double, (String, String) -> String

字典中的一个定义是:

"*" : Operation.binaryOperation(*, {$0 + "*" + $1}) 

字典包含添加,减去和分割的类似定义。

这个计算器工作正常。显示正确的答案,输入的描述也显示在第二行。我不确定它是否正在计算正确的答案。

swift如何知道从第二个参数获取参数$ 0和$ 1并在第一个参数中使用它们?

我希望这个问题有道理。我还没有展示更多涉及的代码。

1 个答案:

答案 0 :(得分:1)

Operation.binaryOperation(*, {$0 + "*" + $1}) 第一个参数(*)是一个函数,例如这个定义:
func *(x: Double, y: Double) -> Double 所以它符合上面的(Double, Double) -> Double定义。

第二个参数是闭包(内联函数),它使用两个匿名参数$ 0和$ 1(Swift知道,这些是字符串,因为有(String, String) -> String定义),并返回字符串。

在swift中,您可以使用$ x语法来按位置寻址参数。

您可以尝试使用内联函数替换第一个参数 例如{$0 * $1} 这是{return $0 * $1}

的简化版本

或带功能: Operation.binaryOperation(multiply, {$0 + "*" + $1})

func multiply(x: Double, y: Double) -> Double { return x * y }