我正在尝试将自己的头完全包裹在Swift的闭包中。我想我了解基本知识。但是,我遇到了一些奇怪的语法,如果有人能理解它的含义,我将不胜感激。
我将展示遇到的简化语法,但首先,我将展示如何在没有 简化语法的情况下编写此代码。我想我理解以下代码中发生的所有事情,但是我将对其进行叙述只是为了确保:)
//function
func manipulate(numbers: [Int], using algorithm: (Int) -> Int){
for number in numbers{
let result = algorithm(number)
print("Manipulating \(number) produced \(result)")
}
}
//trailing closure syntax
manipulate(numbers: [1,2,3]){(number: Int) -> Int in
return number * number
}
好的,所以我们基本上是在声明一个称为操纵的函数,该函数需要2个参数。这些参数之一是 numbers ,它是一个整数数组。第二个参数是外部使用的 ,内部是 algorithm 的闭包,它使用一个Int作为参数,并返回一个Int。
好吧,该函数然后遍历数组 numbers 中的所有数字,并对每个数字应用调用闭包 algorithm 的结果。
好的,这就是函数的作用,现在,让我们用尾随闭包语法来称呼它。
我所做的就是调用函数 manipulate 并传入第一个参数 numbers ,然后按照结尾的闭包语法定义闭包将要使用。它使用一个我称为 number 的参数,即一个Int,并返回另一个Int,即number * number。
这段代码对我来说很有意义。
这是让我震惊的变种。该函数的定义完全相同,但是,该函数的调用方式我不了解。
//function
func manipulate(numbers: [Int], using algorithm: (Int) -> Int){
for number in numbers{
let result = algorithm(number)
print("Manipulating \(number) produced \(result)")
}
}
//trailing closure syntax
manipulate(numbers: [1,2,3]){ number in
number * number
}
首先,我们没有指定闭包采用的参数的类型,也没有指定返回值的类型。另外,在调用此函数时, number 在这种情况下甚至意味着什么?
如果有人能解释这里发生的事情,我将不胜感激。我很确定这是Swift中一些惯用的语法,但我不太了解。 谢谢!