고차함수
- 함수를 파라미터로 받거나, 함수의 결과 값으로 함수를 리턴하는 함수 (input이나 output이 함수인 함수)
- 대표적으로 map, filter, reduce가 있음 (forEach, compactMap, flatMap)
- Sequance, Collection 프로토콜을 따르는 컬렉션에 기본적으로 구현되어 있는 함수
map
- 기존 배열의 각 값들을 새롭게 매핑해 새로운 배열을 리턴하는 함수 (매핑 방식은 클로저가 제공)
let numbers = [1, 2, 3, 4, 5]
// numbers.map(transform: (Int) throw -> T)
let newNumbers = numbers.map{num in
return num + 1
}
// 위와 동일하나 간소화된 문법
// let newNumbers = numbers.map{$0 + 1}
print(newNumbers) // [2, 3, 4, 5, 6]
filter
- 기존 배열의 각 값들의 조건 충족 여부를 확인해 조건에 충족하는 값만을 선별해 새로운 배열을 리턴하는 함수 (조건은 클로저가 제공)
let names = ["Rarla", "Christina", "Bailey", "Homes"]
// names.filter(isIncluded: (String) throws -> Bool)
let newNames = names.filter{ name in
name.contains("a")
}
print(newNames) // ["Rarla", "Christina"]
reduce
- 기존 배열의 각 값들을 클로저가 제공하는 방식으로 결합해서 마지막 값(단 하나의 값)을 리턴하는 함수
let numbers = [1,2,3,4,5]
// numbers.reduce(initialResult: Result, nextPartialResult: (Result -> Int) throws -> Result)
let result = numbers.reduce(0, { a, b in
a + b
})
print(result) // 15
reduce 활용 - 모든 값 더하기
let numbers = [1,2,3,4,5]
numbers.reduce(0,+)
forEach
- 기존 배열에 각 값들을 활용해서 각 값마다 특정 작업을 실행하는 함수
let numbers = [1,2,3]
numbers.forEach{num in
print(num)
}
compactMap
- 기존 배열의 각 값들을 새롭게 매핑해서 변형하되, 옵셔널 요소는 제거하고 새로운 배열을 리턴
- map + 옵셔널제거, 즉 옵셔널을 빼고 컴팩트하게 변환
let optionalArray: [String?] = [1, nil, 2, nil]
let newOptionalArray = optionalArray.compactMap()
// newOptionalArray Type은 [String]
print(newOptionalArray) // [1, 2]
flatMap
- 중첩된 배열의 각 배열을 새롭게 매핑해서 내부 중첩된 배열을 한 겹 제거하고 리턴
let nestedArray = [ [1,2,3], [4,5,6], [7,8,9]]
nestedArray.flatMap{ $0 } // [1,2,3,4,5,6,7,8,9]
728x90
'FRONT-END > iOS' 카테고리의 다른 글
Swift 델리게이트 패턴 이해하기 (0) | 2023.08.07 |
---|---|
Swift 메모리 관리(ARC) (0) | 2023.08.06 |
Swift 클로저(Closure) (0) | 2023.08.04 |
iOS 앱이 만들어지는 원리 (Web과 비교) (0) | 2023.08.02 |
Swift의 self vs Self 이해하기 (0) | 2023.08.02 |
댓글