我正在查看这段代码,它创建了一个枚举和一个使用枚举的字典,后来在字典上开了一个开关。
这是斯坦福CS193P计算器课程的解决方案。枚举中的一个案例包含此代码。
case binaryOperation(Double, Double) -> Double, (String, String) -> String
字典中的一个定义是:
"*" : Operation.binaryOperation(*, {$0 + "*" + $1})
字典包含添加,减去和分割的类似定义。
这个计算器工作正常。显示正确的答案,输入的描述也显示在第二行。我不确定它是否正在计算正确的答案。
swift如何知道从第二个参数获取参数$ 0和$ 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
}