IOS/Swift문법

고차함수

개요

고차함수의 종류와 사용 방법

 

Swift에서 함수는 일급객체로 취급하여 다른 함수를 다른 함수의 전달인자로 사용 가능

이때 매개변수로 함수를 갖는 함수가 고차함수

 

대표적인 고차함수

  • map
  • filter
  • reduce
map

1. 매개변수로 전달된 함수를 실행

2. 함수로 인하여 변형된 결과를 반환

 

적용 가능 타입

배열, 딕셔너리, 세트, 옵셔널

 

컨테이너가 담고 있는 각 원소의 값을 매개변수를 통해 받은 함수에 적용한 후, 다시 컨테이너에 포장하여 반환

let numbers = [1,2,3,4,5]

// 후행 클로저
// 매개변수(클로저) : (number: Int) -> Int
let doubleNumbers1 = numbers.map() { (number: Int) -> Int in
    return number * 2
}

// 경량 문법
let doubleNumbers2 = numbers.map { $0 * 2 }

 

filter

1. 매개변수로 전달된 함수를 실행

2. 조건에 일치하는 원소만을 기존 순서에 맞게 변환

 

적용 가능 타입

배열, 딕셔너리, 세트, 옵셔널

 

컨테이너가 담고 있는 각 원소의 값 중 조건과 일치하는 원소만을 새로운 컨테이너에 기준 순서에 맞게 반환

let numbers = [1,2,3,4,5]

// 후행 클로저
// 매개변수(클로저) : (number: Int) -> Bool
let evenNumbers1 = numbers.filter() { (number: Int) -> Bool in
    return number % 2 == 0
}
//결과 -> evenNumbers1 = [2,4]

//경량 문법
let evenNumbers2 = numbers.map{ $0 % 2 == 0 }

 

reduce

사실상 결합의 기능으로 사용

 

적용 가능 타입

배열, 딕셔너리, 세트, 옵셔널

 

컨테이너가 담고 있는 원소를 차례대로 연산하여 나온 값을 다음 원소와 다시 연산하는 과정을 거친 후 최종 결과를 반환

let numbers = [1,2,3,4,5]

// 후행 클로저
// 매개변수(클로저) : (number: Int) -> Bool
let sum = numbers.reduce(0, { (result: Int, next: Int) -> Int in
    return result + next
}
//sum = 15

let doubleNumbers = numbers.reduce(0) { $0 + $1 }

초기값 : 0
result : result / $0
next : next / $1

 

위 식을 해석하면 초기값은 0이며, 이 초기값은 result의 초기값이 되기도 한다.
이 후 원소를 차례대로 연산( + )하여 나온 값을 result에 저장한다.
결과적으로 result에는 값이 누적되고 next는 다음 원소를 가리킨다.

반응형

'IOS > Swift문법' 카테고리의 다른 글

값타입과 참조타입 차이점  (2) 2022.08.17