我发现这段代码非常混乱:
let myClosure = { (number1: Int, number2: Int) -> Int in
return number1 * number2
}
func useClosure(closure: (Int, Int) -> Int) {
let result = closure(2, 3)
print(result) // prints 6
}
useClosure(closure: myClosure)
函数useClosure
取2个整数,参数名为closure
,它是闭包myClosure
,但myClosure
只有1个返回的整数,那么它怎么可能是useClosure
的参数呢?
那么myClosure
从哪里得到number1
和number2
呢?从useClosure
?
从表面上看,2和3似乎被传递给了myClosure
,但不清楚这是如何发生的。
在我看来,这一切都是循环往复的,没有什么意义。
我还没有真正尝试过任何事情来“解决”这个问题,因为它并不真正需要解决。代码运行良好。我只是在努力理解它-从我作为一个开发人员的旅程。
1条答案
按热度按时间mspsb9vt1#
如果你查看
myClosure
的声明--或者更好的方法是按住option键并单击它--你会看到它的类型是(Int, Int) -> Int
,这正是useClosure
所期望的输入参数的类型。该类型签名表示一个闭包,它接受两个
Int
作为输入,并返回一个Int
。函数useClosure采用2个整数,参数名为closure
useClosure
接受一个闭包作为它的输入,而不是你所说的一对Int
。您要将
useClosure
内的值传递给输入参数closure
。在查看类型签名时,
->
左侧的所有内容都表示函数的输入参数,而右侧的所有内容都表示返回类型。