Swift中闭包的奇数缩短语法吗?

时间:2019-12-26 05:33:14

标签: ios swift function syntax closures

我正在尝试将自己的头完全包裹在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中一些惯用的语法,但我不太了解。 谢谢!

0 个答案:

没有答案