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 | 31 |
Tags
- 리펙터링
- clean architecture
- UICollectionView
- swift documentation
- combine
- 클린 코드
- rxswift
- ios
- Protocol
- ribs
- Xcode
- Human interface guide
- uitableview
- 리펙토링
- HIG
- 애니메이션
- Clean Code
- collectionview
- UITextView
- tableView
- 스위프트
- MVVM
- Refactoring
- RxCocoa
- swiftUI
- map
- uiscrollview
- SWIFT
- Observable
- 리팩토링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 고차함수(Higher order function), Reduce 사용 방법 reduce, reduce(into:) 본문
iOS 기본 (swift)
[iOS - swift] 고차함수(Higher order function), Reduce 사용 방법 reduce, reduce(into:)
jake-kim 2022. 6. 24. 21:10고차함수 (Higher order function)
- 인수로 함수를 받는다 or 함수를 결과로 반환한다
func myFunc(argFunc: Void -> ()) -> someFunc {
}
- 고차함수를 사용하면 유연하고 반복을 줄일 수 있는 장점이 존재하여, Collection 관련 연산을 할때 되도록 고차함수 사용을 지향
swift의 대표적인 고차함수
인수로 함수를 받는 형태 대표적인 4가지
- sorted
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
- filter
func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]
- map
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
- reduce
func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
Reduce
- 내부의 콘텐츠를 하나로 합하는 기능을 실행하는 고차함수
- reduce의 원리는 초기값을 첫번째 인수로 주고, 두번로 인수는 클로저 형태로 전달
- 클로저의 첫번째 인수 $0는 초기값(누적값)이고, $1는 기존 배열의 element 값을 의미
- 초기값을 지정해주는 reduce
- 초기값을 인수로 넣고, 계산 식은 클로저 형태로 넘기는 패턴
- $0는 누적값, $1는 배열의 element 값
let myData = [1, 2, 3, 4, 5]
let sum = myData.reduce(0) {
print("\($0) + \($1)")
// 0 + 1
// 1 + 2
// 3 + 3
// 6 + 4
// 10 + 5
return $0 + $1
}
// 간략하게 표현 (고차함수의 특성)
let sum2 = myData.reduce(0) { $0 + $1 }
- 기존 형태와 달리하여 초기값을 정해줄때 사용하는 reduce(into:)
- $0형태는 into에 들어가는 형과 동일해지고, 이 값이 누적
- $1는 기존 배열들을 순회하여 나온 element 값
// 배열로 만들고 싶은 경우
let val = myData.reduce(into: []) {
print("\($0), \($1)")
// [], 1
// [-1], 2
// [-1, -2], 3
// [-1, -2, -3], 4
// [-1, -2, -3, -4], 5
$0.append($1 * -1)
}
print(val) // [-1, -2, -3, -4, -5]
- reduce(into:)를 사용하면 기존의 Int 배열을 String 배열로 변경도 가능
let val2 = myData.reduce(into: []) { (result: inout [String], element: Int) in
result.append(String(element * -1))
}
print(val2) // ["-1", "-2", "-3", "-4", "-5"]
더욱 간편한 방법) into 인수 넣어줄때 캐스팅하여 타입을 알려주는 방법
let val2 = myData.reduce(into: [] as [String]) { $0.append(String($1 * -1)) }
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] (기본기) 코드 실행과 메모리 적재 타이밍 (0) | 2024.05.31 |
---|---|
[iOS - swift] 앱 이름 지역화 방법 (AppName Localization) (4) | 2022.06.25 |
[iOS - swift] 패턴 매칭(Pattern Matching) 개념 (Optional 패턴, Expression 패턴, switch 문과 ~= 연산자) (0) | 2022.06.22 |
[iOS - swift] Xcode의 Target, Project, Workspace 개념 (0) | 2022.06.16 |
[iOS - swift] Comparable (+ Clamped 기능 구현) (0) | 2022.06.10 |
Comments