Swift代码中常量val的准确类型判定问题
问题解答
你判断的(Int,Int) -> Int是错误的,常量val的准确类型是Int。
- 代码逻辑拆解:等号右侧先定义了一个「接收两个Int参数、返回Int值的加法闭包」,紧接着就传入
1和2两个参数立刻执行了这个闭包,最终赋值给val的是闭包执行后的返回结果,也就是整数3,不是闭包本身。 - 你提到的
(Int,Int) -> Int是代码里那个匿名闭包本身的类型,不是常量val的类型。如果要让val的类型为这个闭包类型,只需要去掉末尾的闭包调用参数即可,参考代码:
// 此写法下val才是闭包类型 (Int, Int) -> Int let val = { (a: Int, b:Int)->Int in a + b }
- 验证方式很简单:在Swift编译环境中按住Option键点击
val变量,编译器给出的类型提示会明确标注其为Int类型,直接打印val得到的输出也是计算结果3,而非函数/闭包实例。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

