Publisher

PublisherλŠ” μ‹œκ°„μ΄ 지남에 따라 κ°’μ˜ μ‹œν€€μŠ€λ₯Ό 전달할 수 μžˆλ‹€.

Combineμ—μ„œ PublisherλŠ” ν”„λ‘œν† μ½œλ‘œ μ •μ˜λ˜μ–΄ 있으며, λ‹€μŒμ˜ νƒ€μž…μ΄ 이 ν”„λ‘œν† μ½œμ„ μ±„νƒν•œλ‹€.

  • Publishers μ—΄κ±°ν˜•μ˜ 쀑첩 νƒ€μž…μœΌλ‘œ μ •μ˜λœ μ—¬λŸ¬ ꡬ쑰체

  • Just, Empty와 같은 Convenience Publisher

  • νƒ€μž…μ„ μ§€μš΄ Publisher인 AnyPublisher ꡬ쑰체

  • λ“±λ“±

두 개의 μ—°κ΄€ νƒ€μž…μ΄ μ •μ˜λ˜μ–΄ μžˆλ‹€.

  • 첫 번째 μ—°κ΄€ νƒ€μž…μ€ κ°’μ˜ νƒ€μž…(Output)이닀.

  • 두 번째 μ—°κ΄€ νƒ€μž…μ€ μ—λŸ¬μ˜ νƒ€μž…(Failure)이닀.

    • μ—λŸ¬μ˜ νƒ€μž…μ€ Error ν”„λ‘œν† μ½œμ„ 채택해야 ν•œλ‹€.

Publisher ν”„λ‘œν† μ½œμ˜ μ΅μŠ€ν…μ…˜μœΌλ‘œ μ—¬λŸ¬ μ˜€νΌλ ˆμ΄ν„°operatorκ°€ μ •μ˜λ˜μ–΄ 있으며, 이λ₯Ό μ‚¬μš©ν•΄μ„œ 이벀트 처리 체인을 ꡬ성할 수 μžˆλ‹€.

각 μ˜€νΌλ ˆμ΄ν„°λŠ” Publisher ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” νƒ€μž…μ„ λ°˜ν™˜ν•œλ‹€.

기본적으둜 Publisher ν”„λ‘œν† μ½œμ€ μ˜€νΌλ ˆμ΄ν„°μ˜ 이름과 그것이 λ°˜ν™˜ν•˜λŠ” Publisher의 이름을 λΉ„μŠ·ν•˜κ²Œ λ§Œλ“€μ–΄ λ‘μ—ˆμœΌλ‚˜, 이 ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜λŠ” κ°œλ³„ PublisherλŠ” μ˜€νΌλ ˆμ΄ν„°κ°€ λ‹€λ₯Έ νƒ€μž…μ˜ Publisherλ₯Ό λ°˜ν™˜ν•˜κ²Œ κ΅¬ν˜„ν•΄λ‘˜ 수 μžˆλ‹€.

protocol Publisher { }

extension Publisher {
  func count() -> Publishers.Count<Self>
}

struct Just: Publisher {
  func count() -> Just<Int>
}

Publisher ν”„λ‘œν† μ½œμ˜ μ΅μŠ€ν…μ…˜μœΌλ‘œ μ—¬λŸ¬ μ˜€νΌλ ˆμ΄ν„°κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμœΌλ‚˜, Just와 같은 κ°œλ³„ Publisherκ°€ μ˜€νΌλ ˆμ΄ν„°λ₯Ό μ˜€λ²„λ‘œλ”©ν•˜μ—¬ λ‹€λ₯Έ νƒ€μž…μ„ λ°˜ν™˜ν•˜λ„λ‘ κ΅¬ν˜„ν•œ 경우λ₯Ό 어렡지 μ•Šκ²Œ μ°Ύμ•„λ³Ό 수 μžˆλ‹€.

RxSwift

일반적으둜 Publisher ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” νƒ€μž…μ€ RxSwift의 Observableκ³Ό 비ꡐ κ°€λŠ₯ν•˜λ‹€.

μ—λŸ¬ μ—°κ΄€ νƒ€μž…μ΄ Never둜 μ—λŸ¬ 값을 μ „λ‹¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이 보μž₯λ˜λŠ” 것은 RxCocoa의 Driver와 비ꡐ κ°€λŠ₯ν•˜λ‹€.

ν•˜λ‚˜μ˜ 값을 μ „λ‹¬ν•˜κ³  μ’…λ£Œν•˜κ±°λ‚˜, μ—λŸ¬λ₯Ό λ‚΄κ³  μ’…λ£Œν•˜λŠ” Single의 λ™μž‘μ€ Combine의 Future Publisherλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.

Completable, Maybe와 같은 RxSwift의 TraitsλŠ” Combine에 λ³„λ„μ˜ νƒ€μž…μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμ§€ μ•Šλ‹€.

ReactiveSwift

일반적으둜 Publisher ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” νƒ€μž…μ€ ReactiveSwift의 SignalProducer와 Signalκ³Ό 비ꡐ κ°€λŠ₯ν•˜λ‹€.

SignalProducerλŠ” 'Cold Observable', Signal은 'Hot Observable'을 μ˜λ―Έν•˜λŠ”λ°, Combineμ—μ„œλŠ” 이 λ™μž‘μ„ λ³„λ„μ˜ νƒ€μž…μœΌλ‘œ κ΅¬λΆ„ν•˜μ§€ μ•ŠλŠ”λ‹€.

Publisher와 Operator 쌍

Convenience Publishers

Publisher

κ΄€λ ¨ Operator

-

-

-

-

-

Record

-

Publisher in Publishers Enum

Convenience Publishers

Publisher

κ΄€λ ¨ Operator

-

catch

Working with Subscribers

Publisher

κ΄€λ ¨ Operator

receive

subscribe

Mapping Elements

Publisher

κ΄€λ ¨ Operator

tryScan

tryMap

FlatMap

flatMap

map / replaceNil / combineLatest / zip

mapError

scan

setFailureType

Filtering Elements

Publisher

κ΄€λ ¨ Operator

compactMap

filter

removeDuplicates

replaceEmpty

replaceError

tryCompactMap

tryFilter

tryRemoveDuplicates

Reducing Elements

Publisher

κ΄€λ ¨ Operator

collect

collect

collect

ignoreOutput

reduce

tryReduce

Applying Mathematical Operations on Elements

Publisher

κ΄€λ ¨ Operator

max / min

tryMax / tryMin

count

Applying Matching Criteria to Elements

Publisher

κ΄€λ ¨ Operator

tryAllSatisfy

allSatisfy

contains

contains

tryContains

Applying Sequence Operations to Elements

Publisher

κ΄€λ ¨ Operator

first

last

drop

drop

tryDrop

append / prepend

dropFirst

prefix

prefix

first

last

tryFirst

tryLast

tryPrefix

output

Combining Elements from Multiple Publishers

Publisher

κ΄€λ ¨ Operator

combineLatest

combineLatest

combineLatest

merge

merge

merge

merge

merge

merge

merge

merge

zip

zip

zip

Handling Errors

Publisher

κ΄€λ ¨ Operator

assertNoFailure

catch

tryCatch

retry

Adapting Publisher Types

Publisher

κ΄€λ ¨ Operator

switchToLatest

Controlling Timing

Publisher

κ΄€λ ¨ Operator

debounce

delay

measureInterval

throttle

timeout

Creating Reference-type Publishers

Publisher

κ΄€λ ¨ Operator

Share

share

Encoding and Decoding

Publisher

κ΄€λ ¨ Operator

encode

decode

Identifying Properties with Key Paths

Publisher

κ΄€λ ¨ Operator

map

map

map

Using Explicit Publisher Connections

Publisher

κ΄€λ ¨ Operator

Autoconnect

autoconnect

Working with Multiple Subscribers

Publisher

κ΄€λ ¨ Operator

Multicast

multicast

Buffering Elements

Publisher

κ΄€λ ¨ Operator

Buffer

buffer

Adding Explicit Connectability

Publisher

κ΄€λ ¨ Operator

MakeConnectable

makeConnectable

Debugging

Publisher

κ΄€λ ¨ Operator

breakpoint / breakpointOnError

handleEvents

print

Misc.

Publisher

κ΄€λ ¨ Operator

eraseToAnyPublisher

NotificationCenter.Publisher

-

-

-

-

Timer.TimerPublisher

-

Last updated