728x90
이번에는 알바집 앱 회원 가입 api 로직을 rx로 변경해보았다!
📌 소스 코드
class RegisterDataManager{
func postRegister(parameters: RegisterRequest) -> Observable<RegisterResponse> {
return Observable.create { (observable) in
let request = AF.request("\(Constant.BASE_URL)~~",
method: .post, parameters: parameters,
encoder: JSONParameterEncoder(),
headers: nil)
.validate(statusCode: 200..<300)
.responseDecodable(of: RegisterResponse.self) { response in
switch response.result {
case .success(let response):
observable.onNext(response)
observable.onCompleted()
case .failure(let error):
observable.onError(error)
observable.onCompleted()
}
}
return Disposables.create { request.cancel() }
}
}
}
struct RegisterBasicViewModel {
network.postRegister(parameters: setupRequest())
.subscribe(
onNext: { result in
// 성공: 데이터 세팅 작업
},
onError: { error in
// 실패: 에러 방출
})
.disposed(by: disposeBag)
}
📌 로직 설명
1) Observable.create 호출해 클로저를 전달
2) 기존 알바집 api 로직 삽입
- 성공: onNext 이벤트 방출
- 실패: onError 이벤트 방출
- 성공+실패 둘다 onCompleted 이벤트 방출
3) Disposables.create 호출해 클로저를 전달
- dispose되면 진행중이던 API 통신을 중단(request.cancel)
✨ 비동기 작업이 존재하지 않는 Observable create
- 시퀀스가 취소되면 모든 작업이 중단되기에 빈 disposable를 반환해도됨
✨ 비동기 작업이 존재하는 Observable create
- 시퀀스가 중단되어도 비동기 작업이 계속 실행됨
- dispose 될때 태스크도 중단해줘야함❗️
[참고]
728x90
'iOS > RxSwift' 카테고리의 다른 글
[RxSwift] UITextField에 Rx 적용하기 (0) | 2022.11.01 |
---|---|
[RxSwift] ReactorKit 알아보기 (0) | 2022.10.30 |
[RxSwift] RxCocoa란? (0) | 2022.10.23 |
[RxSwift] Combining Operator 알아보기 (0) | 2022.10.23 |
[RxSwift] Transforming Operator 알아보기 (0) | 2022.10.23 |