Publishers.Concatenate

μ œλ„€λ¦­ ꡬ쑰체 | λ‹€λ₯Έ Publisherκ°€ μš”μ†Œλ₯Ό λ°©μΆœν•˜κΈ° 이전에 ν•œ Publisher의 μš”μ†Œλ₯Ό λͺ¨λ‘ λ°©μΆœν•˜λŠ” Publisher

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

  • prefix : suffixκ°€ μš”μ†Œλ₯Ό λ‹€μ‹œ λ°œν–‰ν•˜κΈ° 이전에 λͺ¨λ“  μš”μ†Œλ₯Ό λ‹€μ‹œ λ°œν–‰ν•˜λŠ” Publisher

  • suffix : prefix Publisherκ°€ μ’…λ£Œν•œ 직후 λ‹€μ‹œ λ°œν–‰ν•˜λŠ” Publisher

prefix Publisher와 suffix Publisher의 Output νƒ€μž…κ³Ό μ—λŸ¬ νƒ€μž…μ€ 동일해야 ν•œλ‹€.

Publisherλ₯Ό 이어 λΆ™μ΄κ±°λ‚˜ μš”μ†Œλ₯Ό μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

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

append μ˜€νΌλ ˆμ΄ν„°λŠ” λ‹€μŒμ˜ ν˜•νƒœλ₯Ό κ°–λŠ”λ‹€.

  • κ°€λ³€ 인자λ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisherκ°€ μ’…λ£Œν•œ ν›„ μ΄μ–΄μ„œ λ°œν–‰ν•œλ‹€. ex) Just(1).append(2, 3)

  • μ‹œν€€μŠ€λ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisherκ°€ μ’…λ£Œν•œ ν›„ μ΄μ–΄μ„œ λ°œν–‰ν•œλ‹€. ex) Just(1).append([2, 3])

  • Publisherλ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisherκ°€ μ’…λ£Œν•œ ν›„ μ΄μ–΄μ„œ λ°œν–‰ν•œλ‹€. ex) Just(1).append(Just(2))

prepend μ˜€νΌλ ˆμ΄ν„°λŠ” λ‹€μŒμ˜ ν˜•νƒœλ₯Ό κ°–λŠ”λ‹€.

  • κ°€λ³€ 인자λ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisher의 μ•žμ— 이어 λΆ™μ—¬ λ°œν–‰ν•œλ‹€. ex) Just(1).prepend(2, 3)

  • μ‹œν€€μŠ€λ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisher의 μ•žμ— 이어 λΆ™μ—¬ λ°œν–‰ν•œλ‹€. ex) Just(1).prepend([2, 3])

  • Publisherλ₯Ό λ°›μ•„ κΈ°μ‘΄ Publisher의 μ•žμ— 이어 λΆ™μ—¬ λ°œν–‰ν•œλ‹€. ex) Just(1).prepend(Just(2))

// Publishers.Concatenate Publisher
Publishers
  .Concatenate(prefix: Just(1), suffix: Just(2))
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Concatenate Error")
    case .finished:
      print("Combine Concatenate Finish")
    }
  }, receiveValue: { value in
    print("Combine Concatenate : \(value)")
  })
  .store(in: &cancellables)

// append Operator
Just(1)
  .append(Just(2))
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Concatenate Error")
    case .finished:
      print("Combine Concatenate Finish")
    }
  }, receiveValue: { value in
    print("Combine Concatenate : \(value)")
  })
  .store(in: &cancellables)

// Combine Concatenate : 1
// Combine Concatenate : 2
// Combine Concatenate Finish

// prepend Operator
Just(1)
  .prepend(Just(2))
  .sink(receiveCompletion: { completion in
    switch completion {
    case .failure:
      print("Combine Concatenate Error")
    case .finished:
      print("Combine Concatenate Finish")
    }
  }, receiveValue: { value in
    print("Combine Concatenate : \(value)")
  })
  .store(in: &cancellables)

// Combine Concatenate : 2
// Combine Concatenate : 1
// Combine Concatenate Finish

1번 μ½”λ“œμ™€ 2번 μ½”λ“œμ˜ 경우 1의 값을 λ‚΄λŠ” Just Publisher의 끝에 2의 값을 λ‚΄λŠ” Just Publisherλ₯Ό 이어 λΆ™μ˜€λ‹€. 결과적으둜 1κ³Ό 2의 값을 μ°¨λ‘€λŒ€λ‘œ λ‚΄κ³  μ’…λ£Œν•œλ‹€.

3번 μ½”λ“œμ˜ 경우 1의 값을 λ‚΄λŠ” Just Publisher의 μ•žμ— 2의 값을 λ‚΄λŠ” Just Publisherλ₯Ό 이어 λΆ™μ˜€λ‹€. 결과적으둜 2와 1의 값을 μ°¨λ‘€λŒ€λ‘œ λ‚΄κ³  μ’…λ£Œν•œλ‹€.

RxSwift

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

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

// concat Operator
Observable.just(1)
  .concat(Observable.just(2))
  .subscribe(onNext: { value in
    print("RxSwift Concatenate : \(value)")
  }, onError: { _ in
    print("RxSwift Concatenate Error")
  }, onCompleted: {
    print("RxSwift Concatenate Finish")
  })
  .disposed(by: disposeBag)

// RxSwift Concatenate : 1
// RxSwift Concatenate : 2
// RxSwift Concatenate Finish

// startWith Operator
Observable.just(1)
  .startWith(2)
  .subscribe(onNext: { value in
    print("RxSwift Concatenate : \(value)")
  }, onError: { _ in
    print("RxSwift Concatenate Error")
  }, onCompleted: {
    print("RxSwift Concatenate Finish")
  })
  .disposed(by: disposeBag)

// RxSwift Concatenate : 2
// RxSwift Concatenate : 1
// RxSwift Concatenate Finish

ReactiveSwift

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

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

// concat Operator
SignalProducer(value: 1)
  .concat(value: 2)
  .start { event in
    switch event {
    case let .value(value):
      print("ReactiveSwift Concatenate : \(value)")
    case .failed:
      print("ReactiveSwift Concatenate Error")
    case .completed:
      print("ReactiveSwift Concatenate Finish")
    default:
      break
    }
  }

// ReactiveSwift Concatenate : 1
// ReactiveSwift Concatenate : 2
// ReactiveSwift Concatenate Finish

// prefix Operator
SignalProducer(value: 1)
  .prefix(value: 2)
  .start { event in
    switch event {
    case let .value(value):
      print("ReactiveSwift Concatenate : \(value)")
    case .failed:
      print("ReactiveSwift Concatenate Error")
    case .completed:
      print("ReactiveSwift Concatenate Finish")
    default:
      break
    }
  }

// ReactiveSwift Concatenate : 2
// ReactiveSwift Concatenate : 1
// ReactiveSwift Concatenate Finish

μ°Έκ³ 

ReactiveX - Operators - StartWith

Last updated