rad*_*vus 5 parameters syntax anonymous-function swift
我有一个我创建的 Swift 函数,它接受一个函数作为参数:
func doMath(_ f:(_ i1 : Int, _ i2 : Int) ->
(), _ i1: Int, _ i2: Int) {
print("doing Math")
f(i1, i2)
}
Run Code Online (Sandbox Code Playgroud)
该函数采用两个参数(均为 Int)并且不返回任何内容。
我可以使用非匿名函数通过以下代码成功调用该方法。
func add(_ m1:Int, _ m2: Int){
print (m1 + m2)
}
doMath(add, 3,5)
Run Code Online (Sandbox Code Playgroud)
当 doMath 被调用时,它会打印:
做数学
然后调用 add 函数,然后打印:
8
什么语法允许doMath使用匿名函数调用函数?
我试过的
doMath(5,8, {
(m1:Int, m2:Int) -> () in
print(m1 * m2)
})
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出:
func doMath\xe2\x80\x93 正如您所定义的那样 \xe2\x80\x93 将闭包作为第一个参数,\n并将两个整数作为第二个和第三个参数。因此你称其为
doMath({\n (m1:Int, m2:Int) -> () in\n print(m1 * m2)\n}, 5, 8)\nRun Code Online (Sandbox Code Playgroud)\n\n或使用简写参数:
\n\ndoMath({ print($0 * $1) }, 5, 8)\nRun Code Online (Sandbox Code Playgroud)\n\n如果更改函数定义以将闭包作为最后一个\n参数
\n\nfunc doMath(_ i1: Int, _ i2: Int, _ f:(_ i1 : Int, _ i2 : Int) -> ()) {\n print("doing Math")\n f(i1, i2)\n}\nRun Code Online (Sandbox Code Playgroud)\n\n那么你可以称之为
\n\ndoMath(5, 8, { print($0 * $1) })\nRun Code Online (Sandbox Code Playgroud)\n\n或者,使用 \xe2\x80\x9ctrailing 闭包\xe2\x80\x9d\xc2\xa0 语法:
\n\ndoMath(5, 8) { print($0 * $1) }\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2198 次 |
| 最近记录: |