3.1 Creating Observables

Observable을 생성하기 위해서 사용하는 Operator 입니다.

3.1.1 Create

create함수는 클로저로 전달받은 Observer에 데이터를 전달하는 함수 입니다.

클로저로 전달받는 Observer는 subscribe함수를 통해 전달 됩니다.

let observable = Observable<String>.create {
    $0.onNext("Hello")
    $0.onNext("World")
    $0.onCompleted()
    return Disposables.create()
}
observable.subscribe(onNext: {
    print($0)
})
// Hello
// World

3.1.2 Deffered

subscribe 했을 때 deferred로 전달한 클로저를 실행해 새로운 Observable을 만드는 함수 입니다.

let observable = Observable<String>.deferred {
    Observable<String>.create {
        $0.onNext("Hello")
        $0.onNext("World")
        $0.onCompleted()
        return Disposables.create()
    }
}
observable.subscribe(onNext: {
    print($0)
})
// Hello
// World

3.1.3 Empty, Never, Throw

// empty 데이터가 비어있어서 완료만 전달하는 함수
let observable = Observable<String>.empty()
observable.subscribe(onNext: {
    print($0)
}, onCompleted: {
    print("onCompleted")
})

// onCompleted
// never 아무 이벤트도 전달하지 않는 함수
let observable = Observable<String>.never()
observable.subscribe(onNext: {
    print($0)
}, onCompleted: {
    print("onCompleted")
})

// 아무것도 나오지 않음
// throw 에러를 전달하는 함수
enum TestError: Error {
    case A;
}

let observable = Observable<String>.error(TestError.A)
observable.subscribe(onNext: {
    print($0)
}, onError: {
    print("onError: \\($0)")
}, onCompleted: {
    print("onCompleted")
})

// onError: A

3.1.4 Interval

파라미터로 전달한 RxTimeInterval 값 만큼 period를 가지고 0부터 n까지 Int값을 전달하는 함수입니다.

let dispatchGroup = DispatchGroup()
dispatchGroup.enter()

let observable = Observable<Int>.interval(RxTimeInterval.milliseconds(1000), scheduler: MainScheduler.instance)
observable.subscribe(onNext: {
    print($0)
    if $0 == 10 {
        dispatchGroup.leave()
    }
}, onError: {
    print("onError: \\($0)")
}, onCompleted: {
    print("onCompleted")
})

dispatchGroup.notify(queue: DispatchQueue.main) {
    exit(EXIT_SUCCESS)
}
dispatchMain()

// 0
// 1
// 2
// 3
// 4
// 5
// 6
// 7
// 8
// 9
// 10

3.1.5 Range

start부터 count 만큼 1씩 증가한 숫자를 만드는 함수 입니다.

let observable = Observable<Int>.range(start: 2, count: 3)
observable.subscribe(onNext: {
    print($0)
}, onCompleted: {
    print("onCompleted")
})

// 2
// 3
// 4
// onCompleted