我创建了这个 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 时,它打印:
doing Math
然后调用add函数, 然后打印:
8
什么语法允许使用匿名函数调用 doMath
函数?
我尝试过的
- 我正在看书,iOS 12 Programming Fundamentals with Swift by Matt Neuberg但他没有解释带参数的匿名方法。
- 我已经用 google 和 SOed 搜索了,但找不到一个我能快速理解的例子。
- 我尝试了很多变体,以下是我最接近的变体,但我收到如下所示的错误:
doMath(5,8, {
(m1:Int, m2:Int) -> () in
print(m1 * m2)
})
我收到一条错误消息:
最佳答案
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) }
关于swift - 如何创建一个内联匿名函数,以便在函数调用中立即使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53399886/