[swift]闭包的简写

作者: 一声雷 | 来源:发表于2016-07-11 10:04 被阅读230次

    一、闭包的完整格式

       {(parameters) -> return type in    // 闭包的类型描述
           statements                     // 闭包体
       }
    
    

    二、 闭包简写的几个依据

    1.闭包可更具上下文推断参数和返回值的类型

    • 如果闭包没有参数,那么in和之前的描述可以省略。

    2.从单行表达式闭包中隐式返回(也就是闭包体只有一行代码,可以省略return)

    3.可以简化闭包的参数名,如$0,$1(从0开始,表示第i个参数...)

    • 结合第一点,就是即使闭包有参数,使用简化参数名,那么in和之前的描述可以省略。

    4.提供尾随闭包语法(Trailing closure syntax)

    • 4.1如果传入的参数,最后一个参数是闭包,那么可以把闭包放在()外面
    • 4.2如果传入的参数只有一个,且是一个闭包,那么这个()可以省略

    三、结合具体案例分析

    • 1.sort函数(排序函数)
    let names = ["g","b","a", "c", "d", "f"]
    
    // 传入闭包(完整写法)
    names.sort({ (num1, num2) -> Bool in
        return num1 > num2
    })
    
    // 简写1 (依据上面第4点)
    // 4.1
    names.sort(){ (num1, num2) -> Bool in
        return num1 > num2
    }
    // 4.2
    names.sort{ (num1, num2) -> Bool in
        return num1 > num2
    }
    
    // 简写1(依据上面第2.4点)
    names.sort{ (num1, num2) -> Bool in
        num1 > num2
    }
    
    // 简写2(依据上面第1.3.4点)
    names.sort{ return $0 > $1 }
    
    // 简写3(依据上面的1.2.3.4点)
    names.sort{ $0 > $1 }
    
    // 简写4(这不属于闭包的简写,是sort函数的简写)
    names.sort(>)
    names.sort(<)
    names.sort()     // 排序函数(默认从小到大)
    
    

    2.reduce函数 (归整函数)

    var numbers = [1, 2, 3]
    // numbers.reduce(initial: T, combine: (T, Int) throws -> T)
    // 传入了两个参数,最后一个参数是一个闭包
    // 完整的写法
    let result = numbers.reduce( 10 , { (sum, elemt) -> Int in
       return sum + elemt
    })
    
    // 简写1(依据上面的第4点)
    let result01 = numbers.reduce(10) { (sum, elemt) -> Int in
        return sum + elemt
    }
    // 最终简写 (依据上面的1.2.3.4点)
    let result02 = numbers.reduce(10) {$0 + $1}
    
    

    相关文章

      网友评论

        本文标题:[swift]闭包的简写

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