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

Was this helpful?