swift那些事儿 尾随闭包

版权声明:一起学习,一起进步 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)

猜你喜欢

转载自blog.csdn.net/qq_15623599/article/details/89020047