Skip to content

Instantly share code, notes, and snippets.

@ElonPark
Last active June 12, 2020 13:10
Show Gist options
  • Save ElonPark/ddbc6a233eaece3d1dc91923ed8d429c to your computer and use it in GitHub Desktop.
Save ElonPark/ddbc6a233eaece3d1dc91923ed8d429c to your computer and use it in GitHub Desktop.
// MARK: - DummyInteractor
final class DummyInteractor:
PresentableInteractor<DummyPresentable>,
DummyInteractable,
DummyPresentableListener
{
private let dummyUseCase = DummyUseCase()
let dummyActionRelay: PublishRelay<Void> = .init()
init(presenter: DummyPresentable) {
super.init(presenter: presenter)
presenter.listener = self
}
override func didBecomeActive() {
super.didBecomeActive()
bindDummyActionRelay()
}
func bindDummyActionRelay() {
dummyActionRelay //VC에서 받은 액션을 바인딩합니다.
.throttle(3, latest: false, scheduler: MainScheduler.instance)
.flatMapLatest {
//self 캡쳐됨.
self.dummyUseCase.getTutorialCameraExample() //API 호출
.asObservable()
.map { Optional($0) } //원래는 다른 로직이 들어가서 옵셔널로 변경됩니다.
}
.asDriver(onErrorJustReturn: nil)
.drive(onNext: { [weak self] metadata in
guard let this = self,
let metadata = metadata else {
return
}
print(metadata)
})
.disposeOnDeactivate(interactor: self)// <- 명시적으로 dispose되서 메모리 누수가 없는 것으로 예상, 내부에서 CompositeDisposable을 dispose 합니다.
}
}
enum Dummy {
case dum
}
final class DummyUseCase {
func getTutorialCameraExample() -> Single<Dummy> {
// API 콜
return Single.just(.dum)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment