KEMBAR78
Closure, Higher-order function in Swift | PDF
CLOSURE

&

HIGHER-ORDER FUNCTION
let us: Go!

2017 Spring
• Closure
• Higher-Order Functions in Swift





CLOSURE
CLOSURE
•
•
• , , ,
• :
CLOSURE
• ,
• return
•
•
CLOSURE
CLOSURE AS PARAMETER
func sorted(by areInIncreasingOrder: (E, E) -> Bool) -> [E]


(Type, Type) -> Type







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)



CLOSURE
let reversed: [String]
reversed = names.sorted (by: { (left: String, right:
String) -> Bool in
return left > right })
print(reversed)
// ["yagom", "kim", "hana", "eric"]





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
}



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









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







HIGHER-ORDER FUNCTIONS
•
• map, filter, reduce



MAP
• (transform)










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"]
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"]

MAP EXAMPLE
// , , (return)
//
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [0, 2, 4, 6, 8]





FILTER
• 





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]



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]







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







REDUCE
• 





REDUCE USING
FOR STATEMENT
let numbers: [Int] = [2, 8, 15]
var sum: Int = 0
for number in numbers {
sum += number
}
print(sum) // 25





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
!
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





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





/*
var sum: Int = 3
for number in numbers {
sum += number
}
*/

Q&A

Closure, Higher-order function in Swift