<aside> 💡 RxSwift 복습하고 MVVM 쓱 훑어보기 2023.12.05.
</aside>
비동기 처리를 위해 completion을 쓰면 코드가 너무 길어지고.. 리턴값으로 간단하게 이를 표현할 수 없을까?
class 나중에생기는데이터<T> {
private let task: (@escaping (T) -> Void) -> Void
init(task: @escaping (@escaping (T) -> Void) -> Void) {
self.task = task
}
// PromiseKit에서의 then 역할
// RxSwift에서의 subscribe 역할
func 나중에오면(_ f: @escaping (T) -> Void) {
task(f)
}
}
이를 RxSwift로 바꿔보자
class Observable<T> {
private let task: (@escaping (T) -> Void) -> Void
init(task: @escaping (@escaping (T) -> Void) -> Void) {
self.task = task
}
func subscribe(_ f: @escaping (T) -> Void) {
task(f)
}
}
subscribe 메서드는 Disposable을 반환하며, Disposable은 dispose()로 동작을 즉시 취소시킬 수 있다
순환참조 발생 문제를 해소하려면 → 클로저가 없어지면 된다 → completed 또는 error가 발생하면 사라짐
즉, 아래의 두 방법을 아는 것이 RxSwift의 핵심