포스트

RxSwift 연산자 정리 ① - Creating

Creating 연산자

Creating 연산자는 새로운 옵저버블을 생성하는 데 사용되는 연산자입니다. 이러한 연산자들은 단 하나의 요소뿐만 아니라 배열, 시퀀스, 범위 등을 방출하도록 만들거나, 특정 조건에 따라 옵저버블의 동작을 제어하는 데 사용될 수 있습니다.

just

메서드설명비고
just(element:)이 연산자는 단 하나의 항목을 방출하는 옵저버블을 생성합니다.
첫 번째 매개변수로 방출하고자 하는 항목을 전달해야 합니다.
-
1
2
3
Observable<[String]>.just([✈️, ⭐️, ⚽️])
    .subscribe { print($0) }
    .disposed(by: disposeBag)

of

메서드설명비고
of(elements:)이 연산자는 시퀀스의 각 항목를 하나씩 순차적으로 방출하는 옵저버블을 생성합니다.
첫 번째 매개변수로 방출하고자 하는 항목을 차례로 전달해야 합니다.
-
1
2
3
Observable<Int>.of(1, 2, 3, 4, 5)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

from

메서드설명비고
from(array:)이 연산자는 배열의 각 항목을 하나씩 순차적으로 방출하는 옵저버블을 생성합니다.
첫 번째 매개변수로 방출하고자 하는 항목을 배열로 전달해야 합니다.
-
1
2
3
Observable<Int>.from([1, 2, 3, 4, 5])
    .subscribe { print($0) }
    .disposed(by: disposeBag)

range

메서드설명비고
range(start:count:)이 연산자는 시작값부터 일정 횟수 만큼 1씩 증가한 시퀀스를 생성하고,
각 항목을 하나씩 순차적으로 방출하는 옵저버블을 생성합니다.
start 매개변수에 시퀀스 시작값을 전달해야 합니다.
count 매개변수에 시퀀스 증가 횟수를 전달해야 합니다.
FixedWidthInteger 프로토콜을 준수하는 요소로만 시퀀스를 생성할 수 있습니다.
-
1
2
3
Observable<Int>.range(start: 0, count: 10)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

generate

메서드설명비고
generate(initialState:condition:iterate:)이 연산자는 시작값부터 정해진 규칙에 따라 시퀀스를 생성하고,
각 항목을 하나씩 순차적으로 방출하는 옵저버블을 생성합니다.
intialState 매개변수에 시작값을 전달해야 합니다.
condition 매개변수에 시퀀스 생성을 중단할 조건을 검사하는 클로저를 전달해야 합니다.
반환값이 false라면 시퀀스 생성을 중단합니다.
iterate 매개변수에 다음 항목을 만들어 반환할 클로저를 전달해야 합니다.
-
1
2
3
4
5
6
7
8
9
10
11
12
let airplane = "✈️"
let luggage = "🧳"

Observable<String>.generate(
    initialState: airplane, 
    condition: {
    $0.count < 10
}, iterate: {
    $0.count%2 == 0 ? $0 + airplane : $0 + luggage
})
.subscribe { print($0) }
.disposed(by: disposeBag)

repeatElement

메서드설명비고
from(array:)이 연산자는 단 하나의 항목을 무한정 이벤트로 방출하는 옵저버블을 생성합니다.
첫 번째 매개변수로 방출하고자 하는 항목을 전달해야 합니다.
-
1
2
3
4
Observable<Double>.repeatElement(123.0)
    .take(10)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

deffered

메서드설명비고
deferred(observableFactory:)이 연산자는 조건에 따라 서로 다른 옵저버블을 생성합니다.
첫 번째 매개변수로 옵저버블을 반환하는 클로저를 전달해야 합니다.
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let airbus = ["A220", "A330", "A404", "A606"]
let boeinig = ["737", "747", "787"]

var isAirbus = true
let observable = Observable<String>.deferred {
    return isAirbus ? Observable<String>.from(airbus) : Observable<String>.from(boeinig)
}

observable
    .subscribe { print($0); isAirbus = false }
    .disposed(by: disposeBag)

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

create

메서드설명비고
create(<subscribe:)이 연산자를 이용하면 옵저버블이 방출하는 항목을 직접 정의할 수 있습니다.
첫 번째 매개변수로 (AnyObserver) -> Disposable 타입의 클로저를 전달해야 합니다.
-
1
2
3
4
5
6
7
8
9
10
Observable<Int>.create { observer -> Disposable in
    for i in 1...5 {
        observer.onNext(i)
    }
    observer.onCompleted()
    
    return Disposables.create()
}
.subscribe { print($0) }
.disposed(by: disposeBag)

empty

메서드설명비고
empty()이 연산자는 어느 항목도 방출하지 않는 빈 옵저버블을 생성합니다. completed 항목만 방출합니다.-
1
2
3
Observable<Int>.from([1, 2, 3, 4, 5])
    .subscribe { print($0) }
    .disposed(by: disposeBag)

error

메서드설명비고
error(<error:>)이 연산자는 에러 이벤트를 방출하는 옵저버블을 생성합니다.-
1
2
3
4
5
6
7
enum MyError: Error {
    case error
}

Observable<Void>.error(MyError.error)
    .subscribe { print($0) }
    .disposed(by: disposeBag)

참고 자료

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.