Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift中闭包的奇数缩短语法?_Ios_Swift_Function_Syntax_Closures - Fatal编程技术网

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

Ios Swift中闭包的奇数缩短语法?,ios,swift,function,syntax,closures,Ios,Swift,Function,Syntax,Closures,我正试着用Swift把我的头完全裹住。我想我了解基本情况。然而,我遇到了一些奇怪的语法,如果有人能理解它的意思,我将不胜感激 我将展示我遇到的缩短语法,但首先我将展示如何在没有缩短语法的情况下编写此代码。我想我理解了下面代码中发生的一切,但我将叙述它以确保:) 好的,我们基本上声明了一个名为Operate的函数,它有两个参数。其中一个参数是数字,它是一个整数数组。第二个参数是闭包,称为外部使用,内部使用算法,它将Int作为参数,并返回Int 好的,很酷,然后函数遍历数组中的所有数字,并对每个数字

我正试着用Swift把我的头完全裹住。我想我了解基本情况。然而,我遇到了一些奇怪的语法,如果有人能理解它的意思,我将不胜感激

我将展示我遇到的缩短语法,但首先我将展示如何在没有缩短语法的情况下编写此代码。我想我理解了下面代码中发生的一切,但我将叙述它以确保:)

好的,我们基本上声明了一个名为Operate的函数,它有两个参数。其中一个参数是数字,它是一个整数数组。第二个参数是闭包,称为外部使用,内部使用算法,它将Int作为参数,并返回Int

好的,很酷,然后函数遍历数组中的所有数字,并对每个数字应用调用闭包算法的结果

好的,这就是函数所做的,现在,让我们用尾随闭包语法调用它

我所做的是调用函数,操纵并传入第一个参数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
}
首先,我们没有指定闭包接受的参数的类型,也没有指定返回值的类型。另外,在这个上下文中,当我们调用函数时,数字是什么意思

如果有人能解释一下这里发生了什么,我将不胜感激。我很确定这是Swift中的一些惯用语法,但我不太明白。
谢谢

在Swift中,不需要指定可以推断的类型。由于
Operate
的闭包参数接受并返回
Int
Swift可以推断
number
Int
。Swift 5允许您省略return语句(隐式返回),其中代码块只有一条语句。嗯,很有趣,所以Swift推断该数字是闭包的参数?不完全是。在第一个示例中,该参数也称为
number
。在第二种情况下,类型
Int
已被推断,而不是显式声明。编译器知道中关键字
之前的任何内容都将接收参数OHH okay,并且返回类型也会被推断出来?有趣。这是斯威夫特常用的速记吗?是的。没有人会按照您的第一个示例编写代码。
//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
}