- Currying 柯里化
- e.g.1
-
//返回值为 参数为Int返回值为Int的闭包func addTo(adder: Int) -> Int -> Int { return { num in return num + adder }}let addTwo = addTo(2) /* addTwo = (num: Int) -> Int { return num + 2}*/let result =addTwo(6)
- e.g.2
-
//$0 闭包默认的第一个参数func greaterThan(comparer:Int) -> Int -> Bool { return {$0 > comparer}}let greaterThan10 = greaterThan(10)greaterThan10(12)greaterThan10(9)
- e.g.3
-
func makeIterator(from start: Int, step: Int) -> () -> Int { var i = start return { let currentValue = i i += step return currentValue }}var iterator = makeIterator(from: 1, step: 1)iterator() // 1iterator() // 2iterator() // 3var anotherIterator = makeIterator(from: 1, step: 3)anotherIterator() // 1anotherIterator() // 4anotherIterator() // 7anotherIterator() // 10
- Closures in Swift (原作者的警告⚠️:When you have a new hammer everything starts to look like a nail.)
- Array: Sort, Map, Filter, Reduce
- Sort
-
var array = [3, 4, 5]array.sort(by: >) // > is defined as function// sort does not return a new array// the original array has been changed
- Reduce
-
sum = array.reduce(0, {$0 + $1})// or sum = array.reduce(0, +) // operators are methods in Swift
- Array: Sort, Map, Filter, Reduce
-
-
- Map
-
let array = [2, 3, 4]/// result is [3, 4, 5]array.map{ $0 + 1}
- Filter
-
let array = [2, 3, 4]let newArray = array.filter({ $0 > 3})//newArray = [4]
-