swift - 这段 Swift 代码中发生了什么

标签 swift dictionary enums switch-statement

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

这是来自斯坦福 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/

相关文章:

Swift - 使用用户密码加密和解密字符串

python - 将所有键值附加到字典值列表中存在的列表

linux - 枚举数据类型在 bash 中似乎不可用

c# - 测试单个值的 [Flags] 枚举值

ios - 如何设置堆栈背景颜色?

ios - swift 和 Objective-C 中的 CellForRowAtIndexPath

jQuery | .css()多个参数 '-'错误

java - 将 instanceof 与 Java 枚举一起使用

ios - 有人可以解释创建 TableView 的基本过程吗?

dictionary - 卡诺图项什么时候不构成群?