Publishers.Map

μ œλ„€λ¦­ ꡬ쑰체 | 제곡된 ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμœ„μ— 흐λ₯΄λŠ” Publisherλ‘œλΆ€ν„° λͺ¨λ“  μš”μ†Œλ“€μ„ λ³€ν™˜ν•˜λŠ” Publisher

μ΄λ‹ˆμ…œλΌμ΄μ €λŠ” 두 개의 인자λ₯Ό λ°›λŠ”λ‹€.

  • upstream : μƒμœ„μ— 흐λ₯΄λŠ” Publisher

  • transform : μƒμœ„μ— 흐λ₯΄λŠ” Publisherλ‘œλΆ€ν„° μš”μ†Œλ“€μ„ λ³€ν™˜ν•˜κΈ° μœ„ν•œ ν΄λ‘œμ €

λ³€ν™˜ ν•¨μˆ˜λ₯Ό μ μš©ν•˜μ—¬ μš”μ†Œλ₯Ό λ³€ν™˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

Swift의 map ν•¨μˆ˜μ™€ 같은 λ™μž‘μ„ ν•œλ‹€.

map μ˜€νΌλ ˆμ΄ν„°μ™€ 관련이 μžˆλ‹€.

// Publishers.Map Publisher
Publishers.Map(upstream: Publishers.Sequence<[Int], Never>(sequence: [1, 2])) { $0 * 2 }
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Map Error")
    case .finished:
      print("Combine Map Finish")
    }
  }, receiveValue: { number in
    print("Combine Map : \(number)")
  })
  .store(in: &cancellables)

// map Operator
Publishers.Sequence<[Int], Never>(sequence: [1, 2])
  .map { $0 * 2 }
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Map Error")
    case .finished:
      print("Combine Map Finish")
    }
  }, receiveValue: { number in
    print("Combine Map : \(number)")
  })
  .store(in: &cancellables)

// Combine Map : 2
// Combine Map : 4
// Combine Map Finish

Publishers.Sequence Publisherμ—μ„œ 1κ³Ό 2의 값이 μ°¨λ‘€λŒ€λ‘œ λ‚˜μ˜€κ³ , 이 μš”μ†Œμ— λŒ€ν•˜μ—¬ 2λ₯Ό κ³±ν•˜λŠ” λ³€ν™˜ ν•¨μˆ˜λ₯Ό μ μš©ν•˜μ—¬ 2와 4의 값을 λ‚Έ ν›„ μ’…λ£Œν•œλ‹€.

RxSwift

map μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

Observable.from([1, 2])
  .map { $0 * 2 }
  .subscribe(onNext: { number in
    print("RxSwift Map : \(number)")
  }, onError: { _ in
    print("RxSwift Map Error")
  }, onCompleted: {
    print("RxSwift Map Finish")
  })
  .disposed(by: disposeBag)

// RxSwift Map : 2
// RxSwift Map : 4
// RxSwift Map Finish

ReactiveSwift

map μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

SignalProducer([1, 2])
  .map { $0 * 2 }
  .start { event in
    switch event {
    case let .value(number):
      print("ReactiveSwift Map : \(number)")
    case .failed:
      print("ReactiveSwift Map Error")
    case .completed:
      print("ReactiveSwift Map Finish")
    default:
      break
    }
  }

// ReactiveSwift Map : 2
// ReactiveSwift Map : 4
// ReactiveSwift Map Finish

μ°Έκ³ 

ReactiveX - Operators - Map

Last updated