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
- uiscrollview
- map
- Refactoring
- SWIFT
- RxCocoa
- 애니메이션
- ios
- ribs
- uitableview
- 스위프트
- UITextView
- clean architecture
- tableView
- 클린 코드
- Clean Code
- swift documentation
- swiftUI
- 리펙터링
- collectionview
- HIG
- 리팩토링
- MVVM
- 리펙토링
- Xcode
- rxswift
- combine
- UICollectionView
- Protocol
- Observable
- Human interface guide
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] reduce 연산자 사용 주의사항 (reduce(into:_:), reduce(_:_:), 문자열 사이 콤마 넣기) 본문
iOS 응용 (swift)
[iOS - swift] reduce 연산자 사용 주의사항 (reduce(into:_:), reduce(_:_:), 문자열 사이 콤마 넣기)
jake-kim 2024. 4. 29. 01:50reduce 연산자
- reduce 연산자는 배열과 같은 Collection type들을 하나씩 누적하며 하나의 값으로 만드는 연산자
- reduce(into:_:)와 reduce(_:_:) 두가지가 존재
reduce(_:_:)와 reduce(into:_:)
- reduce(_:_:)연산자
- 배열과 같은 Collection Type을 순회하면서 하나의 값으로 만들어주는 연산자
- 첫번째 인수에는 순회할때 축적되어야 하는 초기값
- 두번째 인수에는 클로저를 주입하는데, 클로저의 첫번째 값은 순회할때마다 추적되고 있는 값이며 두번째 값은 순회하는 값
- 배열과 같은 Collection Type을 순회하면서 하나의 값으로 만들어주는 연산자
// ex
let arr = [1, 2, 3, 4, 5]
let val2 = arr.reduce(0) { result, element in
result + element
}
let val1 = arr.reduce(0, +)
- reduce(into:_:) 연산자
- reduce(_:_:)와 유사해보이지만, 차이점은 클로저에 들어가는 첫번째 인수가 inout이므로 수정 되는 값
- reduce(into:_:)는 클로저에서 값을 리턴해주는게 아니라 result를 계속해서 변경해주면서 순회하는것
let letters = "abracadabra"
let letterCount = letters.reduce(into: [:]) { result, letter in
result[letter, default: 0] += 1
}
print(letterCount)
- 주의사항)
- reduce(into_:_:)와 reduce(_:_:) 두 개가 있을 때, inout을 사용하는 reduce(into:_:) 사용은 지양할 것 (값 타입 특성상 읽기와 쓰기가 동시에 일어나면 크래시가 나기 쉽기 때문)
번외) 문자열 사이 콤마넣기
- 문자열 배열이 있을 때, 이 문자열들을 콤마로 이어지게 하고 싶은 경우?
- reduce를 활용
- 주의)
- 그냥 아래처럼 reduce를 사용하면 마치 두 문자열 사이에 콤마가 들어갈 것 같지만, reduce의 첫번째 인수는 초기값이므로 실수할 수 있음을 주의
["a", "b"].reduce(",", +) // ",ab"
- reduce에 초기값을 ""로 주고, 직접 입력해줄 것
reduce("") { $0.isEmpty ? $1 : "\($0), \($1)" }
* 참고
- https://developer.apple.com/documentation/swift/array/reduce(into:_:)
- https://developer.apple.com/documentation/swift/array/reduce(_:_:)
'iOS 응용 (swift)' 카테고리의 다른 글
Comments