728x90
고차함수(Higher-order-function)중 forEach, filter, reduce에 대해 알아 보겠습니다.
forEach
for-in과 동일하게 각각의 Element들을 호출 합니다.
Declaration
func forEach(_ body: (Int) throws -> Void) rethrows
Example
let array = [1,2,3,4,5]
for num in array {
print(num)
}
<출력>
//1
//2
//3
//4
//5
array.forEach {
print($0)
}
<출력>
//1
//2
//3
//4
//5
차이점
forEach에서는 break, continue 구문을 사용할 수 없고,
return을 통해서 빠져나갈 수 있습니다. (continue처럼 동작함)
for-in에서는 break, continue을 사용할 수 있고,
return을 이용해서 빠져나오려면 에러가 납니다.
//-------[for-in]-------
let array = [1,2,3,4,5]
for num in array {
if num == 2 {
break
}
print(num)
}
<출력>
//1
for num in array {
if num == 2 {
continue
}
print(num)
}
<출력>
//1
//3
//4
//5
// <오류>
for num in array {
if num == 2 {
return // 에러
}
print(num)
}
//-------[forEach]-------
array.forEach {
if $0 == 2 {
return
}
print($0)
}
<출력>
//1
//3
//4
//5
// <오류>
array.forEach {
if $0 == 2 {
//break or continue 사용 불가
}
print($0)
}
Filter
메서드명 그대로 값들을 원하는 값을 얻거나 거르고자 할때 사용합니다.
filter는 Bool을 반환합니다.
true이면 값을 포함하고 false이면 값을 배제 합니다.
Declaration
func filter(_ isIncluded: (String) throws -> Bool) rethrows -> [String]
Example
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(names.filter { $0 == "Alex" })
<출력>
// ["Alex"]
let numbers = [1,2,3,4,5,6]
let evenValues = numbers.filter { (num) -> Bool in
return num % 2 == 0
}
print(evenValues)
<출력>
// [2, 4, 6]
Reduce
문자열이든 정수든 내부를 하나로 합쳐주는 기능을 합니다.
첫 번째 매개변수는 초깃값이고, 최초의 값($0)으로 사용됩니다.
Declaration
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Int) throws -> Result) rethrows -> Result
Example
//====== 정수 ======//
// 동일한 문법
(1...50).reduce(0) { (sum, nextValue) -> Int in
return sum + nextValue
}
(1...50).reduce(0) {
$0 + $1
}
<출력>
// 1275
//====== 문자열 ======//
["1","2","3","4","5"].reduce("") { (strSum, str) in
return strSum + str
}
["1","2","3","4","5"].reduce("") {
$0 + $1
}
<출력>
//"12345"
'Swift' 카테고리의 다른 글
[Swift] 문자열 다루기 (0) | 2019.07.25 |
---|---|
[Swift] 고차함수(2) - map, flatMap, compactMap (0) | 2019.07.25 |
[Swift] 프로토콜 지향 프로그램 - 2 (델리게이션 및 프로토콜 설계) (0) | 2019.07.25 |
[Swift] 프로토콜 지향 프로그램 - 1 (프로토콜이란) (0) | 2019.07.24 |
[Swift] 프로토콜 지향 프로그래밍(Protocol-Oriented Programming) (0) | 2019.07.24 |