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)
|
참고 자료