Zel*_* B. 11
在swift中,是指定数学运算的函数名称.要将sign作为参数传递,参数类型必须是带两个数字并返回数字的函数.如果您命令+单击任何符号,您将看到其定义如下:
public func +(lhs:UInt8,rhs:UInt8) - > UInt8
public func +(lhs:Int8,rhs:Int8) - > Int8
public func +(lhs:UInt16,rhs:UInt16) - > UInt16
public func +(lhs:Int16,rhs:Int16) - > Int16
public func +(lhs:UInt32,rhs:UInt32) - > UInt32
public func +(lhs:Int32,rhs:Int32) - > Int32
public func +(lhs:UInt64,rhs:UInt64) - > UInt64
public func +(lhs:Int64,rhs:Int64) - > Int64
public func +(lhs:UInt,rhs:UInt) - > UInt
public func +(lhs:Int,rhs:Int) - > Int
在您的情况下,您的reduce函数应如下所示
func reduce(sign: (Int,Int)->Int) -> Int{
return sign(2,3)
}
reduce(*)
reduce(-)
Run Code Online (Sandbox Code Playgroud)
func doSomeCalculation(_ fun:((Int, Int) -> Int)) -> Int {
return fun(12,13)
}
doSomeCalculation(+) // 25
doSomeCalculation(-) // -1
Run Code Online (Sandbox Code Playgroud)
同样可以做到的UInt,对IntXX等
+基本上只是一个函数,它接受两个参数并返回它的总和.由于functions是任何其他对象,你可以将它们传递给它们.
你可以用同样的方式+进入reduce.
是的,您可以向reduce()函数发送任何二元运算符,前提是原始值和集合中的元素类型相同,因此可以应用运算符。
将运算符视为函数/闭包,您就会明白为什么这在 Swift 中是可能的。事实上,操作符就像函数一样——它们被命名为闭包。
还要考虑可以添加新运算符的方式 - 您定义一个带有运算符名称的函数,该函数采用的参数数量等于运算符的数量。
因此,以下在语法上是正确的,并提供了预期的输出 ( 6):
[1,2,3].reduce(0, combine: +)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |