Swift 如何创建内联匿名函数,以便在函数调用中立即使用?
我创建了一个Swift函数,它将函数作为参数:Swift 如何创建内联匿名函数,以便在函数调用中立即使用?,swift,syntax,parameters,anonymous-function,Swift,Syntax,Parameters,Anonymous Function,我创建了一个Swift函数,它将函数作为参数: func doMath(_ f:(_ i1 : Int, _ i2 : Int) -> (), _ i1: Int, _ i2: Int) { print("doing Math") f(i1, i2) } 该函数接受两个参数(都是Int),但不返回任何内容 我可以使用以下代码使用非匿名函数成功调用该方法 调用doMath时,它会打印: 做数学 然后调用add函数, 然后打印: 八, 什么语法允许使用匿
func doMath(_ f:(_ i1 : Int, _ i2 : Int) ->
(), _ i1: Int, _ i2: Int) {
print("doing Math")
f(i1, i2)
}
该函数接受两个参数(都是Int),但不返回任何内容
我可以使用以下代码使用非匿名函数成功调用该方法
调用doMath时,它会打印:
做数学
然后调用add函数,
然后打印:
八,
什么语法允许使用匿名函数调用doMath
函数
我尝试过的
- 我正在读这本书,但他跳过了用params解释匿名方法
- 我已经在谷歌上搜索过了,但找不到一个快速的例子
- 我尝试了许多变化,以下是我最接近的变化,但我得到的错误如下所示:
我得到一个错误,指出:
func-doMath
——正如您定义的那样——将闭包作为第一个参数,
两个整数作为第二个和第三个参数。所以你称之为
doMath({
(m1:Int, m2:Int) -> () in
print(m1 * m2)
}, 5, 8)
doMath(5, 8, { print($0 * $1) })
或使用速记参数:
doMath({ print($0 * $1) }, 5, 8)
如果将函数定义更改为将闭包作为最后一个
参数
func doMath(_ i1: Int, _ i2: Int, _ f:(_ i1 : Int, _ i2 : Int) -> ()) {
print("doing Math")
f(i1, i2)
}
那你就称它为
doMath({
(m1:Int, m2:Int) -> () in
print(m1 * m2)
}, 5, 8)
doMath(5, 8, { print($0 * $1) })
或者,使用“尾随闭包”语法:
doMath(5, 8) { print($0 * $1) }
您上一次的尝试几乎是对的,您只得到了错误的参数顺序:
doMath({…},5,8)
噢,等等,首先是主体,然后是参数!?!除了那个,我什么都试过了。我从来没有试过。我现在就试试。编辑-试过了,成功了!!!那个语法!!我有点讨厌它。但也许我以后会喜欢的。xD啊!您定义了func-doMath
以闭包作为第一个参数,以两个整数作为第二个和第三个参数。@MartinR噢,这是我定义另一个方法的方式。所有这些都是因为我正在学习Swift并尝试创建样本。好的,把这两件事写在一个答案里,我很乐意把它作为答案。同时,我也会回去重新阅读Neuberg的解释。感谢这让我到达了我需要的地方,并给了我额外的信息,这些信息非常有价值,这样我可以更清楚地理解其他概念。