Swift 函数做参数和闭包做参数的一个细节差别

时间:2021-11-05 20:19:08

函数作参数,示例为传入一个String和一个添加前缀的函数,返回一个添加完前缀的String:

func demo(str:String,addPrefix:(String)->String)->String{
return addPrefix(str)
}
func addPrefix(str2:String)->String{
return "prefix"+str2
} print(demo("", addPrefix: addPrefix))

闭包做参数,示例为传入一个闭包,:

func processWithBlock(cmdStr:String,blockProperty:(backMsg:String) ->String)->String{
var str=blockProperty(backMsg :"backMsg---by block inside func")
return ""
}

可以看出两者区别在,闭包做参数时声明的闭包结构是必须带一个外部参数名的

processWithBlock(cmdStr:String,blockProperty:(backMsg:String) ->String) 

第二个参数是名为blockProperty的闭包,闭包的结构为 (backMsg:String) ->String

而函数作参数时必须不能带参数名

demo(str:String,addPrefix:(String)->String)
第二个参数是名为addPrefix的函数,函数的结构为 (String)->String

这里有2个点:

(1)在声明时,如果是函数,是不需要带参数名的;如果是闭包,是必须带参数名的。

(2)在调用时,如果是函数,第一个参数是没有参数名的;如果是闭包,第一个参数是必须带参数名的。