步骤
1.定义一个带有闭包参数的函数
func doPOST(url: String, commpletehandler: ((String,String) -> Void)?){
if let hander = commpletehandler {
hander( "post","result")
}
}
doPOST("http://www.51.com") { (str1, str2) -> Void in
print(str1)
print(str2)
}
结果:
post
result
缺点:每次处理一样的逻辑都需要重写闭包里面的内容
2.定义一个和步骤1闭包一样的函数,简言之,将闭包抽象成函数
func doPOST(url: String, commpletehandler: ((String,String) -> Void)?){
if let hander = commpletehandler {
hander( "post","result")
}
}
//MARK:函数可以当闭包使用
func doUrlhander(str1: String, str2: String){
print(str1)
print(str2)
}
doPOST("http://www.baidu.com",commpletehandler: doUrlhander)
结果:
post
result
优点:相同的逻辑不用重写
缺点:比较死,只能处理一种逻辑
3.定义一个中间函数,返回值是一个步骤1的闭包
func doPOST(url: String, commpletehandler: ((String,String) -> Void)?){
if let hander = commpletehandler {
hander( "post","result")
}
}
//柯里化函数completeHander1 和 completeHander等价
func completeHander1(str0: String)(str1:String,str2:String){
print(str0)
print(str1)
print(str2)
}
func completeHander(str0: String) -> ((String,String) -> Void){
return {(str1,str2) -> Void in
print(str0)
print(str1)
print(str2)
}
}
doPOST("http://www.google.com.hk", commpletehandler: completeHander1("li"))
结果:
li
post
reult
优点:动态产生一个闭包回调
网友评论