RxSwift에 대한 강의를 4주차 주말인 오늘에서야 보면서 정리해본다...
RxSwift라는 단어가 계속 보여서 강의 내용 맨 마지막에 있던 게 기억나서 찾아봤다....
import RxSwift
let observable = Observable.of("Hello", "RxSwift")
observable.subscribe { event in
print(event)
}
next(Hello)
next(RxSwift)
completed
let observable = Observable.of(1, 2, 3)
observable.subscribe(onNext: { value in
print("Received value: \(value)")
})
Received value: 1
Received value: 2
Received value: 3
public func subscribe(
onNext: ((Element) -> Void)? = nil,
onError: ((Swift.Error) -> Void)? = nil,
onCompleted: (() -> Void)? = nil,
onDisposed: (() -> Void)? = nil
)-> Disposable{
}
하나씩 구독을 취소하는 방법let dispose = Observable<Int>
.interval(,seconds(1), scheduler: MainScheduler.asyncInstance)
.subscribe{ value in
print("onNext:\(value)")
} onError: { error in
print(error)
} onCompleted: {
print("Completed")
} onDisposed: {
print("Disposed")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
dispose.dispose()
}
한번에 여러 개를 구독 취소하는 방법DisposeBag()이라는 걸 사용해서 가방에 담아서 관리
var disposeBag = DisposeBag()
Observable<Int>
.interval(,seconds(1), scheduler: MainScheduler.asyncInstance)
.subscribe{ value in
print("onNext:\(value)")
} onError: { error in
print(error)
} onCompleted: {
print("Completed")
} onDisposed: {
print("Disposed")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
dispose.dispose()
}
let subject = PublishSubject<String>()
subject.onNext("Hello") // 이 값은 구독 전에 발행되어 전달되지 않음
subject.subscribe(onNext: { value in
print("Subscriber received: \(value)")
})
subject.onNext("RxSwift")
subject.onCompleted()
Subscriber received: RxSwift
Observable.of(1, 2, 3)
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
.observeOn(MainScheduler.instance)
.subscribe(onNext: { value in
print("Received on main thread: \(value)")
})
Observable.of(1, 2, 3, 4)
.filter { $0 % 2 == 0 }
.map { $0 * 10 }
.subscribe(onNext: { value in
print("Processed value: \(value)")
})
Processed value: 20
Processed value: 40
let disposeBag = DisposeBag()
myButton.rx.tap
.subscribe(onNext: {
print("Button tapped!")
})
.disposed(by: disposeBag)
RxSwift는 Swift에서 비동기 프로그래밍을 효율적이고 선언적으로 처리하기 위한 강력한 도구입니다. 특히 MVVM 아키텍처를 구현할 때 유용하므로, 이를 프로젝트에 적절히 활용하면 생산성과 코드 품질을 크게 향상시킬 수 있습니다.
머리아프다 다음에 사용하면서 다시 공부하자...