这是什么类型的康斯特(瓦尔)?
let val = { (a: Int, b:Int)->Int in a + b }(1 , 2)不是(Int,Int) -> Int吗?
发布于 2022-06-26 20:56:29
它只是Int,因为它只需要最后的结果,所以在那里调用一个函数,该函数接受2个It并返回它们的添加结果,它将是3
为了确定将来变量的类型,只需在键盘上按住option键,并将其悬停在变量名上即可。
发布于 2022-06-26 21:26:22
这里已经有了一个很好的答案,但我想为记录提供更多的细节。
下面是一个闭包表达式类型的(Int, Int)->Int
{ (a: Int, b:Int)->Int in a + b }您也可以定义一个等价的命名函数:
func f (_ a: Int, _ b:Int)->Int { a+b }然后,您可以使用两个参数调用该函数以获得一个Int值:
let val = f(1,2) 通过用闭包表达式替换函数名,您可以做同样的事情:
let val = { (a: Int, b:Int)->Int in a + b }(1 , 2)您甚至可以将这两种实践结合起来,并逐步显示类型:
let l = { (a: Int, b:Int)->Int in a + b } // name the closure using a variable
print (type(of: l)) // (Int, Int)->Int
let val = l(1 , 2) // use the closure
print (type(of: val)) // Int
print (val)https://stackoverflow.com/questions/72765047
复制相似问题