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
优点:动态产生一个闭包回调
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容