美文网首页
Swift - 函数与闭包的抽象

Swift - 函数与闭包的抽象

作者: 离子来了 | 来源:发表于2016-04-14 16:02 被阅读33次

    步骤

    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 - 函数与闭包的抽象

          本文链接:https://www.haomeiwen.com/subject/hcvglttx.html