Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RxSwift] Observables #16

Closed
seungchan2 opened this issue May 5, 2022 · 0 comments
Closed

[RxSwift] Observables #16

seungchan2 opened this issue May 5, 2022 · 0 comments
Assignees
Labels

Comments

@seungchan2
Copy link
Owner

seungchan2 commented May 5, 2022

RxSwift가 머릿속에서 리셋되가꼬 다시 정리를 합니다. .

Observables

Observable = Observable Sequence = Sequence

비동기적 (Asynchronous)

Observable 들은 일정 기간 동안 계속해서 이벤트를 생성 (emit)

Observable 객체의 생명주기

  1. Observable 객체를 선언하고 데이터 리스트를 입력받음
  2. Observable 객체를 구독하기 위해서는 subscribe를 통하여 구독
  3. Observable은 어떤 구성요소를 가지는 next 이벤트를 최신 값을 계속해서 방출
  4. Observable은 error 이벤트를 방출하여 완전 종료될 수 있음
  5. Observable은 complete 이벤트를 방출하여 완전 종료 될 수 있음

next

구성요소를 계속해서 방출시킬 수 있는 기능 (구독자에게 데이터 전달)

completed

이벤트를 종료시킬 수 있는 기능 (구독자에게 완료되었음을 알림)

error

이벤트에 오류가 있음을 알고 중간에 종료시킬 수 있는 기능 (구독자에게 오류를 알림)

Observable.just()

말 그대로 "오직" 하나의 요소를 포함하는 Sequence 생성
배열 삽입도 가능

Observable<Int>.just(1)

Observable.of()

타입 추론을 이용하며 "Sequence"생성
순차적으로 방출

Observable<Int>.of(1, 2, 3, 4, 5)

Observable.of([1, 2, 3, 4, 5])
    .subscribe(onNext: {
        print($0)
    })

Observable.from()

Array 타입만 처리하고 각각 요소들을 하나씩 emit

Observable.from([1, 2, 3, 4, 5])
    .subscribe(onNext: {
        print($0)
    })

Obervable.create()

Observable.create { observer -> Disposable in
    observer.onNext(1)
    observer.onCompleted()
    observer.onNext(2)
    return Disposables.create()
}
.subscribe(onNext: {
    print($0)
}, onError: {
    print($0)
}, onCompleted: {
    print("completed")
}, onDisposed: {
    print("disposed")
})
.disposed(by: disposeBag)

클로저 형식이며 다양한 값(onNext, onCompleted, ...)을 생성할 수 있음

subscribe

Observable 객체를 생성하고 subscribe하기 전까지는 아무런 이벤트를 방출하지 않음

반드시 !! subscribe 해야 함

Observable.empty()

아무런 이벤트를 방출하지 않음
즉시 종료
0개의 값을 가질 때 사용

Observable.empty()
    .subscribe {
        print($0)
    }

Observable<Void>.empty()
    .subscribe {
        print($0)
    }

Observable.never()

Observable.never()
    .debug("never")
    .subscribe(onNext: {
        print($0)
    },
    onCompleted: {
        print("Completed")
    }
)

Observable.range(start: , count: )

Observable.range(start: 1, count: 9)
    .subscribe(onNext: {
        print("2*\($0) = \(2*$0)")
    })

dispose

구독 취소의 개념
dispose 후 이벤트가 방출되지 않음
무한한 요소일 때 필수

Observable.of(1, 2, 3)
    .subscribe(onNext: {
        print($0)
    })
    .dispose()

disposeBag

구독을 하면 disposeBag에 담고 있다가 자신이 할당해제 할 때 구독자들에 대해서 DisposeBag을 날림

disposeBag을 사용하지 않는다면 메모리 누수 발생!

let disposeBag = DisposeBag()

Observable.of(1, 2, 3)
    .subscribe(onNext: {
        print($0)
    })
    .disposed(by: disposeBag)
@seungchan2 seungchan2 self-assigned this May 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant