iOS Swift 学习手册 @IT·互联网程序员

[swift]闭包的简写

2016-07-11  本文已影响230人  一声雷

一、闭包的完整格式

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

二、 闭包简写的几个依据

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

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

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

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

三、结合具体案例分析

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}

上一篇下一篇

猜你喜欢

热点阅读