Publishers.Reduce

μ œλ„€λ¦­ ꡬ쑰체 | 전달받은 λͺ¨λ“  μš”μ†Œμ— ν΄λ‘œμ €λ₯Ό μ μš©ν•˜κ³ , μƒμœ„μ— 흐λ₯΄λŠ” Publisherκ°€ μ’…λ£Œν•  λ•Œ μΆ•μ λœ 값을 λ‚΄λŠ” Publisher

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

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

  • initial : ν΄λ‘œμ €μ˜ 첫 번째 ν˜ΈμΆœμ— μ œκ³΅λ˜λŠ” 초기 κ°’

  • nextPartialResult : μƒˆλ‘œμš΄ 값을 λ‚΄κΈ° μœ„ν•΄ μ΄μ „κΉŒμ§€ μΆ•μ λœ κ°’κ³Ό μƒμœ„ Publisher의 λ‹€μŒ μš”μ†Œλ₯Ό μ·¨ν•˜λŠ” ν΄λ‘œμ €

μƒμœ„ Publisherκ°€ λ°°μΆœν•œ ν•­λͺ©μ— ν•¨μˆ˜λ₯Ό μˆœμ„œλŒ€λ‘œ μ μš©ν•˜κ³  ν•¨μˆ˜λ₯Ό μ—°μ‚°ν•œ ν›„ μ΅œμ’… κ²°κ³Όλ₯Ό λ°œν–‰ν•œλ‹€.

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

μƒμœ„ Publisher에 흐λ₯΄λŠ” λͺ¨λ“  값을 λͺ¨μ•„ μ–΄λ– ν•œ ν•˜λ‚˜μ˜ 값을 λ‚΄κ³  싢을 λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

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

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

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

// Combine Reduce : 6
// Combine Reduce Finish

μƒμœ„ Publisherκ°€ 1, 2, 3의 값을 μ°¨λ‘€λŒ€λ‘œ λ‚΄λŠ”λ°, 초기 값을 0으둜 ν•˜κ³  μ€‘μ²©λœ μ΄μ „μ˜ κ°’κ³Ό μƒˆλ‘œμš΄ 값에 λ§μ…ˆ 연산을 ν•˜λŠ” ν΄λ‘œμ €λ₯Ό μ œκ³΅ν•˜μ—¬ μš”μ†Œλ₯Ό λͺ¨λ‘ λ”ν•œ κ²°κ³Όλ₯Ό 내도둝 ν•˜μ˜€λ‹€.

결과적으둜 6의 값을 λ‚΄κ³  μ’…λ£Œν•œλ‹€.

RxSwift

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

Observable.from([1, 2, 3])
  .reduce(0) { $0 + $1 }
  .subscribe(onNext: { value in
    print("RxSwift Reduce : \(value)")
  }, onError: { _ in
    print("RxSwift Reduce Error")
  }, onCompleted: {
    print("RxSwift Reduce Finish")
  })
  .disposed(by: disposeBag)

// RxSwift Reduce : 6
// RxSwift Reduce Finish

ReactiveSwift

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

SignalProducer([1, 2, 3])
  .reduce(0) { $0 + $1 }
  .start { event in
    switch event {
    case let .value(value):
      print("ReactiveSwift Reduce : \(value)")
    case .failed:
      print("ReactiveSwift Reduce Error")
    case .completed:
      print("ReactiveSwift Reduce Finish")
    default:
      break
    }
  }

// ReactiveSwift Reduce : 6
// ReactiveSwift Reduce Finish

μ°Έκ³ 

ReactiveX - Operators - Reduce

Last updated