μ λ€λ¦ ꡬ쑰체 | μ λ¬λ°μ λͺ¨λ μμμ ν΄λ‘μ λ₯Ό μ μ©νκ³ , μμμ νλ₯΄λ 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