EEYatHo 앱 깎는 이야기

Swift ) 고차함수 - EEYatHo iOS 본문

iOS, Swift/Swift Theory

Swift ) 고차함수 - EEYatHo iOS

EEYatHo 2022. 9. 23. 17:29
반응형

 

고차함수 ( Higher-order function )


함수(클로저)를 파라미터로 받거나, 함수를 리턴하는 함수

 

Swift에서 제공하는 고차함수를 셀수도 없이 많다.

자주 사용하는 순으로 정리한다.

 

  1. map
  2. filter
  3. reduce
  4. forEach
  5. compactMap
  6. flatMap

 

 

map


Array에서 모든 값들에게 같은 연산을 적용한 새로운 Array를 만든다.

let cast = ["Vivien", "Marlon", "Kim", "Karl"]

let lowercaseNames = cast.map { $0.lowercased() }
// ["vivien", "marlon", "kim", "karl"]

let letterCounts = cast.map { $0.count }
// [6, 6, 3, 4]

 

 

 

filter


Array에서 특정 조건을 만족(클로저 연산 결과가 true)인 값들로 이루어진 Array를 만든다. 

let numbers = [0, 1, 2, 3]

let odds = numbers.filter { $0 % 2 == 1 }
// [1, 3]

 

 

 

reduce


Array에 있는 모든 값들을 순차적으로 클로저 연산하여 하나의 값으로 만든다.

결과값0 = closure(초기값, index0값)

결과값1 = closure(결과값0, index1값)

...

결과값N = closure(결과값N-1, indexN)

return 결과값N

 

let numbers = [1, 2, 3, 4]
let numberSum = numbers.reduce(0, { $0 + $1 })
// 10

 

 

 

forEach


for문의 고차함수 형태다. 모든 값들을 한번씩 클로저 연산한다.

let numberWords = ["one", "two", "three"]
numberWords.forEach { print($0) }
// print "one"
// print "two"
// print "three"

 

 

 

compactMap


map과 같은 결과에서, nil인 것들을 제외시킨다.

let willIntCastingStrings = ["1", "2", "three", "///4///", "5"]

let mapped: [Int?] = possibleNumbers.map { Int($0) }
// [1, 2, nil, nil, 5]

let compactMapped: [Int] = possibleNumbers.compactMap { Int($0) }
// [1, 2, 5]

 

 

 

flatMap


map과 같은 결과에서, 결과값들을 joined 연산한다.

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

let mapped = numbers.map { Array(repeating: $0, count: $0) }
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) }
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

let sameResult = numbers.map { Array(repeating: $0, count: $0) }.joined()
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

 

 

Comments