我正在查看这段代码,它创建了一个枚举和一个使用该枚举的字典,然后在字典上打开了一个开关。
这是来自斯坦福 CS193P 计算器类(class)的解决方案。枚举中的一个案例包含此代码。
case binaryOperation(Double, Double) -> Double, (String, String) -> String
字典里的一个定义是这样的:
"*" : Operation.binaryOperation(*, {$0 + "*" + $1})
该词典包含类似的加、减、除定义。
这个计算器工作正常。显示正确答案,并在第二行显示输入说明。虽然它正在计算正确答案,但我不确定。
swift 如何知道从第二个参数中取出参数 $0 和 $1 并在第一个参数中使用它们?
我希望这个问题是有道理的。还有很多我没有展示的代码。
最佳答案
在Operation.binaryOperation(*, {$0 + "*"+ $1})
第一个参数(*
)是一个函数,例如这个定义:
func *(x: Double, y: Double) -> Double
所以它符合上面的 (Double, Double) -> Double
定义。
第二个参数是闭包(内联函数),它使用两个匿名参数 $0 和 $1(Swift 知道,这些是字符串,因为有 (String, String) -> String
定义) , 并返回字符串。
在 swift 中,您可以使用 $x 语法,按位置寻址参数。
可以尝试将第一个参数替换为inline-function
例如{$0 * $1}
这是 {return $0 * $1}
或具有以下功能:
Operation.binaryOperation(乘法,{$0 + "*"+ $1})
func multiply(x: Double, y: Double) -> Double {
返回 x * y
}
关于swift - 这段 Swift 代码中发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43572096/