Swift 速记闭包不起作用
我这里有一个闭包,它检查第一个值是否大于第二个值,如果为true,则返回一个布尔值:Swift 速记闭包不起作用,swift,closures,Swift,Closures,我这里有一个闭包,它检查第一个值是否大于第二个值,如果为true,则返回一个布尔值: var bloco12: (Int, Int -> Bool) -> Bool = { return $1($0) } println(bloco12(32, {$0 > 10})) 但我了解到,有另一种方法可以简化此过程,只需使用符号,如下所示: bloco12(32, >) 但是这段代码不起作用,为什么?请注意,函数接受两个参数并返回一个Bool。您的示例不起作用,因
var bloco12: (Int, Int -> Bool) -> Bool = {
return $1($0)
}
println(bloco12(32, {$0 > 10}))
但我了解到,有另一种方法可以简化此过程,只需使用符号,如下所示:
bloco12(32, >)
但是这段代码不起作用,为什么?请注意,
函数接受两个参数并返回一个Bool
。您的示例不起作用,因为您试图将
传递给一个参数,该参数需要一个只接受一个参数的函数。我已经更改了您的示例,以演示如何通过
:
var bloco12: (Int, Int, (Int, Int) -> Bool) -> Bool = {
return $2($0, $1)
}
println(bloco12(32, 33, {$0 > $1})) // prints "false"
println(bloco12(32, 33, >)) // prints "false"
println(bloco12(32, 33, <)) // prints "true"
println(bloco12(32, 33, ==)) // prints "false"
var bloco12:(Int,Int,(Int,Int)->Bool)->Bool={
返回$2($0,$1)
}
println(bloco12(32,33,{$0>$1}))//打印“false”
println(bloco12(32,33,>)//打印“false”
println(bloco12(32,33,函数签名不匹配。bloco12
接受一个Int
和一个接受Int
并返回一个Bool
的闭包。你试图给它一个Int
和一个需要两个参数并返回Bool
@vacawama的函数,这很有趣……在许多教程中,它们都是一个fu要做到这一点,唯一使用symbol>的形式就是创建一个函数?
本身表示(Int,Int)->Bool
。虽然有很多
函数。还有(Double,Double)->Bool
,(Float,Float)->Bool
但它们都接受2个参数并返回一个Bool
。