Swift - 函数与闭包的抽象

步骤

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
优点:动态产生一个闭包回调

你可能感兴趣的:(Swift - 函数与闭包的抽象)