Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- uitableview
- 클린 코드
- Protocol
- 애니메이션
- 스위프트
- 리팩토링
- MVVM
- map
- rxswift
- Clean Code
- 리펙토링
- 리펙터링
- combine
- ribs
- RxCocoa
- swiftUI
- SWIFT
- swift documentation
- collectionview
- Observable
- HIG
- UICollectionView
- Human interface guide
- UITextView
- ios
- Refactoring
- tableView
- Xcode
- clean architecture
- uiscrollview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[swift] 16. 고차 함수(Higher-order function) 본문
1. 고차함수(Higher-order function)란?
하나 이상의 함수를 인자로 취하거나 함수를 반환하는 함수를 의미
- higher order function: 함수 내부에서 일어나는 특성 (함수를 인수로 받는 것, 함수를 리턴하는 것)
- first class: 함수 외부에서 일어나는 특성 (함수를 변수에 대입 가능한 것)
ex) 배열에서 각 원소들을 접근하여 새로운 값을 생성하거나(map),
조건을 정하여 그 조건에 맞는 원소만 접근하거나(filter),
배열을 하나의 값으로 표현하거나(reduce)
2. swift의 대표적인 고차함수
1) Map
콜렉션 내부의 기존 데이터를 변형(transform)하여 새로운 콜렉션 생성
* 아래 예제를 map을 이용해서 for문 없이 표현하면?
let arr = [1,2,3]
var doubleArr: [Int] = [Int]()
for item in arr {
doubleArr.append(item*2)
}
sol)
let arr = [1,2,3]
var doubleArr = arr.map { (n:Int) -> Int in
return n * 2
}
* flatMap, compactMap 참고: ios-development.tistory.com/357
2) filter
콜렉션 내부의 기존 데이터를 돌면서 특정 조건에 맞는 것만 선택하는 것
* 아래 예제를 map을 이용해서 for문 없이 표현하면?
let arr = [1,2,3,4,5]
var doubleArr: [Int] = [Int]()
for item in arr {
if item % 2 == 0 {
doubleArr.append(item*2)
}
}
sol)
let arr = [1,2,3,4,5]
var doubleArr = arr.filter{(n: Int) -> Bool in
return n % 2 == 0
}
}
3) reduce
콜렉션 내부의 컨텐츠를 하나로 결합 (...array to value)
.reduce(초기값) { (누적값 + 배열에 존재하는 값) }
* 아래 예제를 reduce를 이용하여 for문 없이 표현하면?
let arr = [1,2,3,4,5]
var sum = 0
for item in arr {
sum += item
}
sol)
let arr = [1,2,3,4,5]
var sum = arr.reduce(0) {(first: Int, second: Int) -> Int in
return first + second
}
/*
first=0, second=1
first=1, second=2
first=3, second=3
first=6, second=4
first=10, second=5
*/
'swift 5 문법' 카테고리의 다른 글
[swift] 18. 초기화(initialize) 심화 개념 (0) | 2020.10.01 |
---|---|
[swift] 17. 연산자 재정의 (0) | 2020.09.27 |
[swift] 15. 객체지향 vs 함수형 (0) | 2020.04.20 |
[swift] 14. 접근 제한자(private, fileprivate, internal, public, open) (0) | 2020.04.18 |
[swift] 13. 초기화(init, convenience init, required init, override init) (0) | 2020.04.17 |
Comments