✨
Combine 🤝 RxSwift 🤝 ReactiveSwift
  • Combine 🤝 RxSwift 🤝 ReactiveSwift
  • Publisher
    • Publishers.Merge
    • Publishers.Zip3
    • Publishers.TryScan
    • Publishers.MergeMany
    • Publishers.Breakpoint
    • AnyPublisher
    • Publishers.Concatenate
    • Publishers.Drop
    • Publishers.Decode
    • Publishers.TryCompactMap
    • Publishers.CombineLatest4
    • Optional.Publisher
    • Publishers.CollectByCount
    • Publishers.TryFilter
    • Publishers.CombineLatest3
    • Publishers.TryContainsWhere
    • Just
    • Publishers.TryFirstWhere
    • Publishers.MapError
    • Publishers.RemoveDuplicates
    • Result.Publisher
    • Publishers.LastWhere
    • Publishers.First
    • Publishers.Throttle
    • Publishers.DropUntilOutput
    • Publishers.Count
    • Publishers.Comparison
    • Publishers.Debounce
    • Publishers.MapKeyPath
    • Publishers.CollectByTime
    • Publishers.TryDropWhile
    • Empty
    • Publishers.PrefixUntilOutput
    • Publishers.Print
    • URLSession.DataTaskPublisher
    • Publishers.Reduce
    • Publishers.MapKeyPath3
    • Publishers.Collect
    • Publishers.TryPrefixWhile
    • Publishers.MapKeyPath2
    • Future
    • Publishers.SubscribeOn
    • Publishers.AllSatisfy
    • Publishers.Retry
    • Publishers.ContainsWhere
    • Publishers.SetFailureType
    • Publishers.TryMap
    • Publishers.Output
    • Publishers.TryRemoveDuplicates
    • Publishers.HandleEvents
    • Publishers.Sequence
    • Publishers.TryCatch
    • Publishers.Merge8
    • Publishers.CombineLatest
    • Deferred
    • Publishers.Merge7
    • Publishers.Contains
    • Fail
    • Publishers.Merge6
    • Publishers.TryComparison
    • Publishers.Delay
    • Publishers.Scan
    • Publishers.Merge5
    • Publishers.MeasureInterval
    • Publishers.AssertNoFailure
    • Publishers.ReceiveOn
    • Publishers.Merge4
    • Publishers.DropWhile
    • Publishers.Merge3
    • Publishers.TryReduce
    • Publishers.Zip
    • Publishers.Timeout
    • Publishers.CompactMap
    • Publishers.ReplaceEmpty
    • Publishers.PrefixWhile
    • Publishers.Filter
    • Publishers.TryAllSatisfy
    • Publishers.FirstWhere
    • Publishers.Last
    • Publishers.Map
    • Publishers.SwitchToLatest
    • Publishers.TryLastWhere
    • Publishers.Encode
    • Publishers.Catch
    • Publishers.ReplaceError
    • Pulishers.IgnoreOutput
    • Publishers.Zip4
  • Subject
    • PassthroughSubject
    • CurrentValueSubject
  • Subscriber
Powered by GitBook
On this page
  • RxSwift
  • ReactiveSwift
  • Publisher와 Operator 쌍
  • Convenience Publishers
  • Publisher in Publishers Enum
  • Misc.

Was this helpful?

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

-

PreviousCombine 🤝 RxSwift 🤝 ReactiveSwiftNextPublishers.Merge

Last updated 5 years ago

Was this helpful?

Future
Just
Deferred
Empty
Fail
Sequence
Catch
ReceiveOn
SubscribeOn
TryScan
TryMap
Map
MapError
Scan
SetFailureType
CompactMap
Filter
RemoveDuplicates
ReplaceEmpty
ReplaceError
TryCompactMap
TryFilter
TryRemoveDuplicates
Collect
CollectByCount
CollectByTime
IgnoreOutput
Reduce
TryReduce
Comparison
TryComparison
Count
TryAllSatisfy
AllSatisfy
Contains
ContainsWhere
TryContainsWhere
FirstWhere
LastWhere
DropUntilOutput
DropWhile
TryDropWhile
Concatenate
Drop
PrefixUntilOutput
PrefixWhile
First
Last
TryFirstWhere
TryLastWhere
TryPrefixWhile
Output
CombineLatest
CombineLatest3
CombineLatest4
Merge
Merge3
Merge4
Merge5
Merge6
Merge7
Merge8
MergeMany
Zip
Zip3
Zip4
AssertNoFailure
Catch
TryCatch
Retry
SwitchToLatest
Debounce
Delay
MeasureInterval
Throttle
Timeout
Encode
Decode
MapKeyPath
MapKeyPath2
MapKeyPath3
Breakpoint
HandleEvents
Print
AnyPublisher
Optional.Publisher
Result.Publisher
URLSession.DataTaskPublisher