Create Operators

Youn·2021년 11월 5일
0

iOS-RxSwift

목록 보기
6/8
post-thumbnail
  • next 이벤트 방출 이후 completed 이벤트 전달

just

하나의 항목을 방출하는 observable 생성

Observable.just(element)
let disposeBag = DisposeBag()
let element = "hi"
Observable.just(element)  // observable 생성 
/* 구독 */.subscribe{event in print(event)}
.disposed(by: disposeBag)

Observable.just([1, 2, 3])
   .subscribe { event in print(event) }
   .disposed(by: disposeBag)
// >> 1,2,3 방출 

  • parameter 로 전달한 요소를 그대로 방출함
  • 1개 방출

of

2개 이상의 요소 방출

Observable.of("hi", "bye)
Observable.of([1, 2], [3, 4], [5, 6])
// >> next 이벤트가 요소 수만큼 전달됨! 
  • 원하는 수만큼 요소 방출 가능

from

배열로 받은 요소를 하나씩 순서대로 방출

Observable.from([1,2,3,4,5])
//>> next(1)
//   next(2)
//   next(3)
//   next(4)
//   next(5)

range

정수를 지정된 수만큼 방출

Observable.range(start: 1, count: 10) 
// >> next(1), next(2), next(3), next(4), next(5), next(6), next(7), next(8), next(9), next(10)
  • param (시작할정수, 방출할 개수)
  • 정수만 가능

generate

증가 / 감소 폭을 변경할 수 있는 시퀀스 방출

Observable.generate(initialState: 0, condition: {$0 <= 10}, iterate: {$0 + 2})
  • param (시작값, condition(true - 요소방출, false - completed), nil, 변경값)
  • 정수로 제한되지 않는 parameter

repeatElement

동일한 요소를 반복적(무한)으로 방출하는 옵져버블 생성

Observable.repeatElement(element)
  • 무한정 생성되기 때문에 요소 개수를 정하는 것이 중요함 (take 연산자 등으로 정해줄 것)
Observable.repeatElement(element)
	.take(7)
	.subscribe {print($0)}
	.disposed(by: disposeBag)
    // >> 7개요소 방출 이후 completed event 방출

deferred

특정 조건에 따라 옵져버블 생성

let factory: Observable<String> = Observable.deferred {
	flag.toggle()
	
	if flag {
		return Observable.from(animals) // 배열에 있는 요소들이 개별적으로 방출
	} else {
		return Observable.from(fruits)
	}
}
factory
	.subscribe {print($0)}
	.disposed(by: disposeBag)

factory
	.subscribe {print($0)}
	.disposed(by: disposeBag)

// >> animals 요소들의 이벤트 방출 이후 fruits 요소들의 이벤트 방출조금
  • param(옵져버블을 return 하는 closure)

create

옵져버블이 동작하는 방식을 직접 구현

Observable<String>.create { (observer) -> Disposable in
	guard let url = URL(string: "https://www.apple.com")
	else { // error
		observer.onError(MyError.error)
		return Disposables.create()
	}
	guard let html = try? String(contentsOf: url, encoding: .utf8) else {  // error
		return Disposables.create()
	}

	observer.onNext(html) // 정상적 문자열 방출
	observer.onCompleted()

	return Disposables.create() // 모든 리소스 정리, 옵져버블 정상적으로 종료
}
.subscribe{print($0)}
.disposed(by: disposeBag)
  • param(옵져버블을 파라미터로 받아서 disposable return 하는 클로저)
  • disposable 을 return 할때는 Disposables.create() 사용
  • 요소를 방출할 때 - onNext(방출할 요소)
  • 옵져버블을 종료하기 위한 onError, onCompleted 를 반드시 호출해야 함

empty & error -> next 이벤트를 전달하지 않음, 요소 방출 X

empty

completed event 를 전달하고 종료하는 observable 생성

Observable<Void>.empty()
// >> completed()
  • param X
  • 옵져버가 아무 동작없이 종료해야 할 때 활용

error

error event 를 전달하고 종료하는 observable 생성

enum MyError: Error {
   case error
}

Observable<Void>.error(MyError.error)
// >> error(error)
  • param (error)
  • 에러 처리활 때 활용
profile
youn

0개의 댓글