版权声明:一起学习,一起进步 https://blog.csdn.net/qq_15623599/article/details/89020047
尾随闭包:一个无名函数(闭包)作为一个参数传给一个正常的函数
func methondName(参数1: String, 参数2: String, 闭包closure: (closure的参数1,closure的参数2) -> closure的返回值类型) -> 函数的返回值类型 {
//函数结束时正常调用自身参数->闭包函数
return closure(参数)
}
func addStr(s1:String,s2:String,closure:(String,String)->String)->String{
return closure(s1,s2);
}
let aaa = addStr(s1: "Hello", s2: "world", closure: {(c1:String,c2:String) -> (String) in return (c1) + (c2)}
)
print(aaa)
定一个addStr函数用来拼接两个字符串 参数有String类型s1,String类型s2 和一个闭包类型的closure
返回值类型是String
该函数在返回(即执行return)时调用的是传过来的参数closure这个闭包函数
闭包函数如下
closure: {(c1:String,c2:String) -> (String) in return (c1) + (c2)}
let aaa 是String类型,因为addStr函数 整个返回的是String类型的值
简化:
闭包函数在知道自身参数是什么类型的时候,以及 只有一句return的执行语句时,参数类型和return关键字是可以删除的
如下所示
func addStr(s1:String,s2:String,closure:(String,String)->String)->String{
return closure(s1,s2);
}
//let aaa = addStr(s1: "Hello", s2: "world", closure: {(c1:String,c2:String) -> (String) in return (c1) + (c2)})
let aaa = addStr(s1: "Hello", s2: "world", closure: {(c1,c2) -> (String) in (c1) + (c2)})
print(aaa)
在简化:
如果不拘泥于参数名的时候可以用类似于通配符的感觉进行使用 如下
func addStr(s1:String,s2:String,closure:(String,String)->String)->String{
return closure(s1,s2);
}
//let aaa = addStr(s1: "Hello", s2: "world", closure: {(c1:String,c2:String) -> (String) in return (c1) + (c2)})
//let aaa = addStr(s1: "Hello", s2: "world", closure: {(c1,c2) -> (String) in (c1) + (c2)})
let aaa = addStr(s1: "Hello", s2: "world", closure: {($0) + ($1)})
print(aaa)