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 |