-
Rxswift (map, flatmap, compactmap) 정리RxSwift 2021. 6. 28. 10:56
이 차이는 잘 알아두는게 좋다
flatmap
먼저 flatmap이 두가지가 있었다... 아래가 Deprecated 된거고, 위가 사용하는 아이인데요 뭐가 다른지 보겠습니다.
https://developer.apple.com/documentation/swift/sequence/2905332-flatmap
https://developer.apple.com/documentation/swift/sequence/2907182-flatmap
let numbers = [1, 2, 3, 4] let mapped = numbers.map { Array(repeating: $0, count: $0) } // [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]] let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) } // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
위의 예시로 map과 flatMap의 차이를 알 수 있다.
flatMap : 주어진 요소를 하나의 배열로 리턴한다.
CompactMap
Optional을 해제하는 단순히 non-nil 값을 얻고 싶다면 CompactMap을 사용하면 된다.
let possibleNumbers = ["1", "2", "three", "///4///", "5"] let mapped: [Int?] = possibleNumbers.map { str in Int(str) } // [1, 2, nil, nil, 5] let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) } // [1, 2, 5]
flatMap을 non-nil return을 위해 사용하게되면 아래처럼 나온다.
* 이게 좋은 점은 우리가 force unwrapping을 사용하는 대신 compatMap 사용을 고려해본다고 생각하면 좋을것같다.
+
reduce
initialResult와 nextPartialResult로 연산등의 작업을 할 수 있는 함수다.
let numbers = [1, 2, 3, 4] let numberSum = numbers.reduce(0, { x, y in x + y }) // numberSum == 10
마지막 총정리
flatMap의 심화과정을 알고 싶다면 아래를 참고하면 된다.
728x90'RxSwift' 카테고리의 다른 글
RxSwift 스터디 계획 따라가기 (0) 2021.07.12 RxSwift Subject (0) 2021.07.09 Rxswift Debounce / Throttle (0) 2021.06.29 Rxswift (flatMap, flatMapFirst, flatMapLatest) (0) 2021.06.24 RxSwift (1) 2021.06.17