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函数, 然后打印: 八, 什么语法允许使用匿

我创建了一个Swift函数,它将函数作为参数:

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的解释。感谢这让我到达了我需要的地方,并给了我额外的信息,这些信息非常有价值,这样我可以更清楚地理解其他概念。