我有一个我创建的Swift函数,它将函数作为参数:
func doMath(_ f:(_ i1 : Int, _ i2 : Int) ->
(), _ i1: Int, _ i2: Int) {
print("doing Math")
f(i1, i2)
}
该函数接受两个参数(均为Int),但不返回任何内容。
我可以使用非匿名函数通过以下代码成功调用该方法。
func add(_ m1:Int, _ m2: Int){
print (m1 + m2)
}
doMath(add, 3,5)
调用doMath时,它会打印:
做数学
然后调用添加功能, 然后打印:
8
什么语法允许使用匿名函数调用doMath
函数?
我尝试过的事情
doMath(5,8, {
(m1:Int, m2:Int) -> () in
print(m1 * m2)
})
我收到一条错误消息,指出:
答案 0 :(得分:3)
func doMath
(如您所定义)将闭包作为第一个参数,
和两个整数作为第二个和第三个参数。因此,您将其称为
doMath({
(m1:Int, m2:Int) -> () in
print(m1 * m2)
}, 5, 8)
或带有简写参数的
doMath({ print($0 * $1) }, 5, 8)
如果更改函数定义以将闭包作为最后一个 参数
func doMath(_ i1: Int, _ i2: Int, _ f:(_ i1 : Int, _ i2 : Int) -> ()) {
print("doing Math")
f(i1, i2)
}
然后您将其称为
doMath(5, 8, { print($0 * $1) })
或使用“尾随闭包”语法:
doMath(5, 8) { print($0 * $1) }