27
CLOSURE & HIGHER-ORDER FUNCTION let us: Go! 2017 Spring

Closure, Higher-order function in Swift

Embed Size (px)

Citation preview

Page 1: Closure, Higher-order function in Swift

CLOSURE &

HIGHER-ORDER FUNCTION

let us: Go!2017 Spring

Page 2: Closure, Higher-order function in Swift

• Closure

• Higher-Order Functions in Swift

Page 3: Closure, Higher-order function in Swift

CLOSURE

Page 4: Closure, Higher-order function in Swift

CLOSURE

• , , ,

• :

Page 5: Closure, Higher-order function in Swift

CLOSURE

• ,

• return

Page 6: Closure, Higher-order function in Swift

CLOSURE

Page 7: Closure, Higher-order function in Swift

CLOSURE AS PARAMETER

func sorted(by areInIncreasingOrder: (E, E) -> Bool) -> [E]

(Type, Type) -> Type

Page 8: Closure, Higher-order function in Swift

CLOSURE

func backwards(left: String, right: String) -> Bool {

print("\(left) \(right) ") return left > right }

let names: [String] = ["hana", "eric", "yagom", "kim"]

let reversed: [String] = names.sorted(by: backwards)

print(reversed)

Page 9: Closure, Higher-order function in Swift

CLOSURE

let reversed: [String]

reversed = names.sorted (by: { (left: String, right: String) -> Bool in return left > right })

print(reversed) // ["yagom", "kim", "hana", "eric"]

Page 10: Closure, Higher-order function in Swift

CLOSURE

// let reversed: [String] = names.sorted() { (left: String, right: String) -> Bool in return left > right }

// sorted(by:) . let reversed: [String] = names.sorted { (left: String, right: String) -> Bool in return left > right }

Page 11: Closure, Higher-order function in Swift

CLOSURE

// . let reversed: [String] = names.sorted { (left, right) in return left > right }

Page 12: Closure, Higher-order function in Swift

CLOSURE

// let reversed: [String] = names.sorted { return $0 > $1 }

// let reversed: [String] = names.sorted { $0 > $1 }

Page 13: Closure, Higher-order function in Swift

HIGHER-ORDER FUNCTIONS

• map, filter, reduce

Page 14: Closure, Higher-order function in Swift

MAP

• (transform)

Page 15: Closure, Higher-order function in Swift

TRANSFORM USING FOR STATEMENT

let numbers: [Int] = [0, 1, 2, 3, 4] var doubledNumbers: [Int] = [Int]() var strings: [String] = [String]()

// for for number in numbers { doubledNumbers.append(number * 2) strings.append("\(number)") }

print(doubledNumbers) // [0, 2, 4, 6, 8] print(strings) // ["0", "1", "2", "3", "4"]

Page 16: Closure, Higher-order function in Swift

MAP EXAMPLE

// map doubledNumbers = numbers.map({ (number: Int) -> Int in return number * 2 }) strings = numbers.map({ (number: Int) -> String in return "\(number)" })

print(doubledNumbers) // [0, 2, 4, 6, 8] print(strings) // ["0", "1", "2", "3", "4"]

Page 17: Closure, Higher-order function in Swift

MAP EXAMPLE

// , , (return) // doubledNumbers = numbers.map { $0 * 2 }

print(doubledNumbers) // [0, 2, 4, 6, 8]

Page 18: Closure, Higher-order function in Swift

FILTER

Page 19: Closure, Higher-order function in Swift

FILTER USING FOR STATEMENT

let numbers: [Int] = [0, 1, 2, 3, 4, 5] var evenNumbers: [Int] = [Int]()

// for for number in numbers { if number % 2 != 0 { continue } evenNumbers.append(number) }

print(evenNumbers) // [0, 2, 4]

Page 20: Closure, Higher-order function in Swift

FILTER EXAMPLE

let numbers: [Int] = [0, 1, 2, 3, 4, 5]

let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in return number % 2 == 0 } print(evenNumbers) // [0, 2, 4]

Page 21: Closure, Higher-order function in Swift

FILTER EXAMPLE

let oddNumbers: [Int] = numbers.filter { $0 % 2 != 0 } print(oddNumbers) // [1, 3, 5]

Page 22: Closure, Higher-order function in Swift

REDUCE

Page 23: Closure, Higher-order function in Swift

REDUCE USINGFOR STATEMENT

let numbers: [Int] = [2, 8, 15] var sum: Int = 0

for number in numbers { sum += number }

print(sum) // 25

Page 24: Closure, Higher-order function in Swift

REDUCE EXAMPLE

let numbers: [Int] = [2, 8, 15]

// 0 . let sum: Int = numbers.reduce(0, { (first: Int, second: Int) -> Int in print("\(first) + \(second)") return first + second })

print(sum) // 25

!

Page 25: Closure, Higher-order function in Swift

REDUCE EXAMPLE

let numbers: [Int] = [2, 8, 15]

// 0 . let subtract: Int = numbers.reduce(0, { (first: Int, second: Int) -> Int in print("\(first) - \(second)") return first - second })

print(subtract) // -25

Page 26: Closure, Higher-order function in Swift

REDUCE EXAMPLE// 3 . let sumFromThree = numbers.reduce(3) { $0 + $1 }

print(sumFromThree) // 28/* var sum: Int = 3

for number in numbers { sum += number } */

Page 27: Closure, Higher-order function in Swift

Q&A