728x90
Operator
: Publisher가 subcriber에게 전달하는 데이터를 변환하는 작업을 중간에 할 수가 있음.
오늘 살펴볼 목록
- map
- compactMap
- tryMap
map, compactMap, tryMap의 차이
- 셋 모두 어떤 것에서 다른것으로 변환해주는 작업을 할 수 있다.
- map
let numbers = [1,2,3,4,5] let doubles = numbers.map{ $0 * 2 } let wizards = ["Harry", "Hermione", "Ron"] let uppercased = wizards.map{ $0.uppercased() } // Int로 변환이 불가능하다면, // Optional 정수가 반환됨. let maybeNumbers = wizards.map{ Int($0) } // [nil, nil, nil]
let numbers = [1,2,3,4,5]
let doubles = numbers.map{ $0 * 2 }
let wizards = ["Harry", "Hermione", "Ron"]
let uppercased = wizards.map{ $0.uppercased() }
// Int로 변환이 불가능하다면,
// Optional 정수가 반환됨.
let maybeNumbers = wizards.map{ Int($0) } // [nil, nil, nil]
- compactMap (compact: 대략 경계 없이 무한히 뻗어나가지 않는 공간)
- nil인 값은 반환해주지 않고, 무시함.
let compactNumbers = wizards.compactMap{ Int($0) } // []
- 이를 이용하여 Optional을 바인딩하는 과정을 생략 할 수 있음.
let imageViews = view.subviews.compactMap { $0 as? UIImageView } let urls = urlStrings.compactMap { URL(string: $0 )}
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]
- tryMap
- 에러가 발생 할 수 있는 상황에 사용하면서, 에러가 발생하면 중단하고 subscriber에게 Error가 발생 했음을 전달함.
struct ParseError: Error {} func romanNumeral(from:Int) throws -> String { let romanNumeralDict: [Int : String] = [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"] guard let numeral = romanNumeralDict[from] else { throw ParseError() } return numeral } let numbers = [5, 4, 3, 2, 1, 0] cancellable = numbers.publisher .tryMap { try romanNumeral(from: $0) } .sink( receiveCompletion: { print ("completion: \\($0)") }, receiveValue: { print ("\\($0)", terminator: " ") } ) // Prints: "V IV III II I completion: failure(ParseError())"
반응형
'iOS' 카테고리의 다른 글
Combine - Error Handling (0) | 2022.04.19 |
---|---|
Combine - Operator(switchToLastest, FlatMap) (0) | 2022.04.19 |
combine - 2. Network 예제 살펴보기 (0) | 2022.04.18 |
combine - 1. Combine에 관하여 (0) | 2022.03.14 |
iOS 동시성 (GCD Grand Central Dispatch) 기본 개념 (0) | 2022.02.07 |