고차함수
- 고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
- swift의 함수(클로저)는 일급시민이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결괏값으로 반환할 수 있음
일급객체 (First Class Citizen)
- 객체가 런타임에도 생성 가능하다.
- 객체를 인자 값으로 전달할 수 있어야 한다.
- 객체를 반환 값으로 사용할 수 있어야 한다.
- 데이터 구조 안에 저장할 수 있어야 한다.
map
- 기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환
//For문 사용
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var multiplyArray = [Int]()
for num in numArray{
multiplyArray.append(num*7)
}
print(multiplyArray) //[7, 14, 21, 28, 35, 42, 49, 56, 63]
//map 사용
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var multiplyArray: [Int] = numArray.map {$0*7}
print(multiplyArray) //[7, 14, 21, 28, 35, 42, 49, 56, 63]
filter
- 기존 컨테이너의 요소에 대해 조건에 만족하는 값에 대해서 새로운 컨테이너로 반환
//For문 사용
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var evenNumArray = [Int]()
for num in numArray{
if num%2 == 0{
evenNumArray.append(num)
}
}
print(evenNumArray) //[2, 4, 6, 8]
//filter 사용
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var evenNumArray = numArray.filter {$0%2 == 0}
print(evenNumArray) //[2, 4, 6, 8]
reduce
- 정의한 클로저를 사용하여 기존 컨테이너의 요소를 결합한 결과를 반환
- 초기값이 필요
//For문 사용
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = 0
for num in numArray{
sum += num
}
print(sum) //45
//reduce 1
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = numArray.reduce(0, +)
print(sum) //45
//reduce 2
let numArray = [1,2, 3, 4, 5, 6, 7, 8, 9]
var sum = numArray.reduce(0) {$0 + $1}
print(sum) //45
forEach
- for-in과 동일하게 각각의 Element들을 호출
- forEach에서는 break, continue 구문을 사용할 수 없고, return을 통해서 빠져나갈 수 있음
let array = [1,2,3,4,5]
//for-in문
for num in array {
print(num)
}
//forEach문
array.forEach {
print($0)
}
compactMap
- 컨테이너의 각 요소를 조건을 지정하여 호출할 때, nil 이 아닌 배열을 반환
- sequence의 모든 원소에 대한 변환 작업 결과 중 nil이 아닌 것만을 Array로 반환
//1차원 배열
let a = [1, 2, 3, nil, 4, 5]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest) // [1, 2, 3, 4, 5]
//nil이 있는 2차원 배열
let a = [[1, 2, 3], [nil, 4, 5]]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest)
//[[Optional(1), Optional(2), Optional(3)], [nil, Optional(4), Optional(5)]]
//nil이 없는 2차원 배열
let a = [[1, 2, 3], [4, 5]]
let compactMapTest = a.compactMap { $0 }
print(compactMapTest) //[[1, 2, 3], [4, 5]]
flatMap
- 컨테이너의 각 요소를 사용하여 지정된 조건을 호출할 때, 순차적인 결과의 배열을 반환
- equence의 모든 원소에 대한 변환 작업을 concatenate 하여 반환
- 고차원 배열을 한 꺼풀 벗겨서 하나 아래의 차원으로 바꿔준다는 의미
//1차원 배열
let a = [1, 2, 3, nil, 4, 5]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest) // [1, 2, 3, 4, 5]
//nil이 있는 2차원 배열
let a = [[1, 2, 3], [nil, 4, 5]]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest)
//[Optional(1), Optional(2), Optional(3), nil, Optional(4), Optional(5)]
//nil이 없는 2차원 배열
let a = [[1, 2, 3], [4, 5]]
let flatMapTest = a.flatMap { $0 }
print(flatMapTest) //[1, 2, 3, 4, 5]
반응형
'⌨️ Language > swift' 카테고리의 다른 글
[Swift] 제네릭 (Generic) (0) | 2023.02.07 |
---|---|
[Swift] 에러 처리 (0) | 2023.02.07 |
[Swift] 클로저 (Closure) (0) | 2023.02.06 |
[Swift] 익스텐션 (Extensions) (0) | 2023.02.06 |
[Swift] 프로토콜 (Protocol) (0) | 2023.02.06 |
댓글