RxSwift는 반응형 프로그래밍을 iOS에서 구현할 수 있게 도와주는 라이브러리로, 주로 Observable, Single, Subject 같은 개념들을 사용해서 비동기 작업을 쉽게 처리할 수 있다.
ObservableObservable은 데이터를 스트림 형태로 방출하는 역할을 한다.
여기서는 문자열 데이터를 순차적으로 방출하는 예제를 작성
func test() {
let nameObservable: Observable<String> = Observable.create { observer in
observer.onNext("SH")
observer.onNext("Palrang")
observer.onNext("Kim")
return Disposables.create()
}
nameObservable.subscribe(onNext: { value in
print("이름: \(value)")
}, onCompleted: {
print("끝")
}).disposed(by: disposeBag)
print("하이")
}
onNext: 정상적인 데이터를 방출할 때 사용subscribe)을 해야 실제로 데이터 방출이 이루어짐.print("하이")는 동기적으로 실행되기 때문에 옵저버블보다 나중에 찍히는 걸 확인할 수 있음.Observable의 비동기 방출이번엔 1초마다 정수형 데이터를 방출하는 Observable로, 비동기적으로 데이터를 방출하기 때문에 순서가 달라진다.
func test2() {
let someObservable = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance).take(5)
someObservable.subscribe(onNext: { value in
print("방출된 값: \(value)")
}, onCompleted: {
print("completed")
}).disposed(by: disposeBag)
print("헬로")
}
interval을 사용해서 1초마다 값을 방출함.print("헬로")가 먼저 실행되고, 그 다음에 값이 방출되는 걸 볼 수 있음.SingleSingle은 한 번만 데이터를 방출하거나 에러를 발생시키는 Observable로,주로 네트워크 요청 같은 작업에 사용된다.
func test3() {
let single = Single.create { observer in
observer(.success("Palrang"))
return Disposables.create()
}
single.subscribe(onSuccess: { value in
print(value)
}).disposed(by: disposeBag)
}
onSuccess는 성공적으로 데이터를 방출할 때 사용되며, 옵저버블의 onNext와 동일Single의 onFailure는 옵저버블의 onError와 동일Subject - BehaviorSubjectSubject는 옵저버블 중에서 외부에서 값을 넣어줄 수 있는 옵저버블이다.
BehaviorSubject는 초기값을 가지는 Subject로, 가장 최근에 방출된 값을 기억하고 있다가 새로운 구독자에게 그 값을 방출해준다.
func test4() {
let subject = BehaviorSubject(value: 10)
subject.subscribe(onNext: { value in
print("값 방출: \(value)")
}).disposed(by: disposeBag)
subject.onNext(20)
subject.onNext(30)
}
onNext로 외부에서도 값을 주입할 수 있음.Subject - PublishSubjectPublishSubject는 초기값이 없고,구독 이후에 방출된 데이터만 받을 수 있다.
func test5() {
let subject = PublishSubject<Int>()
subject.subscribe(onNext: { value in
print("값 방출: \(value)")
}).disposed(by: disposeBag)
subject.onNext(20)
subject.onNext(30)
}