Operators

Eli·2021년 2월 15일
1

RxSwift

목록 보기
3/5
post-thumbnail

RxSwift 는 Observables를 잘 활용하고 편리하게 다루기 위해

다양한 Operators들을 제공한다.

Operators가 너무 많기 때문에 타입별로 자주 사용하게 될 것 같은걸 몇개씩만 정리해보려고 한다.

모든 내용은 아래의 공식 Docs에 있으니 첨부한다.

ReactiveX - Operators

Creating

//Create
//가장 기본적인 생성 메서드로 아래와 같은 예시로 Observable을 생성 가능하다.
Observable.create() { emitter in
		//아래와 같이 데이터를 발생
		emitter.onNext("Something")

		return Disposables.create()
}

//Just
//단일의 이벤트를 방생시켜,
//간결하게 한개만 데이터를 넣고 싶을 때 사용
Observable.just("just one")

//From
//한번에 여러개의 이벤트를 전달한다. ex) 배열 등
Observable.from([1, 2, 3])

Transforming

발생되는 이벤트의 값을 변경시켜주는 Operators

let numberOb = Observable<Int>.just(10)
//이벤트 값을 String으로 변경해줌
let stringMap = numberOb.map { String($0) }

stringMap.subscribe(onNext: { event in
	// event는 String으로 내려오게 됨
	print(event)
}).disposed(by: disposeBag)

Filtering

발생하는 이벤트들을 선택적으로 발생시키는 Operators

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9 10]

Observable.from(numbers)
			.filter{ $0.isMultiple(of: 2) }
			.subscribe { print($0) }
//2의 배수만 필터가 되어 아래와 같이 출력된다.

//next(2)
//next(4)
//next(6)
//next(8)
//next(10)

Combining

한개 이상의 Observable을 한개의 Observable로

//추후 다룰 내용이지만 아직 값이 없는 Observable 형태
let subject1 = PublishSubject()
let subject2 = PublishSubject()

//of 연산자는 여러개의 값/Observable을 받을 수 있는 생성 연산자
Observable.of(subject1, subject2)
	//받아진 Observable을 merge로 결합	
   .merge()
   .subscribe {
       print($0)
   }

subject1.on(.Next(10))
subject1.on(.Next(11))
subject1.on(.Completed)
subject2.on(.Next(22))
subject2.on(.Completed)

//아래와 같이 차례대로 수행됨
Next(10)
Next(11)
Next(22)
Completed

Error

do try catch와 비슷하며,

Observable가 error로 끝나지 않고 Observable<> 타입을 반환한다.

let observable = Observable<Int>
    .create { observer -> Disposable in
        observer.onNext(1)
        observer.onNext(2)
        observer.onError(NSError(domain: "", code: 100, userInfo: nil))
        observer.onError(NSError(domain: "", code: 200, userInfo: nil))
        return Disposables.create { }
}

observable
		//에러가 발생하면 NSError.code의 이벤트를 발생시킨다.
    .catchError { .just(($0 as NSError).code) }
    .subscribe { print($0) }
    .disposed(by: disposeBag)

/* Prints:
    next(1)
    next(2)
    next(100)
		next(200)
    completed
*/

Mathematical

Observable이 배출하는 모든 값을 연산하여 이벤트를 발생시키는 연산자.

//reduce
//Swift의 Reduce와 동일해 별다른 설명은 생략하며, 예시로 확인한다.
Observable.of(1,2,3,4,5).reduce(0,accumulator: +)
    .subscribe(onNext: {
        print($0)
    })

//모든 값을 더 해 이벤트를 발생
//retrun 15

정리

RxSwift에서는 다양한 연산자를 제공하며 최소한으로 몇가지만 정리를 해보았다.

물론 공식 docs를 확인하면 수 많은 것들이 있으며, Rx를 사용하면서 때에 필요한 연산자를 찾아 사용하면서 익힐 수 있도록 해야한다.

이번 정리에서는 이런 연산자들이 있으며, 다음부터는 있을 것 같은? 느낌이 들거나 있으면 편하겠다는 생각이 들 때 그때그때 공부하도록 하면 될 듯 하다.

profile
애플을 좋아한다. 그래서 iOS 개발을 한다. @Kurly

0개의 댓글