Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- swift concurrency
- RxSwift
- custombottomsheet
- claen architecture
- task cancellation
- reactorkit
- scene delegate
- identifiable
- traits
- rxdatasources
- SWIFT
- DP
- uikit toast
- swift navigationcontroller
- swift dashed line
- domain data
- swift bottomsheet
- swift custom ui
- coordinator
- BFS
- 버튼 피드백
- swift 백준
- task cancel
- swift 점선
- UIKit
- custom ui
- Tuist
- custom navigation bar
- 타임라인 포맷팅
- button configuration
Archives
- Today
- Total
김경록의 앱 개발 여정
[RxSwift] Single<Void> 와 Completable 본문
✅ Single ?
Single은 하나의 값을 방출(success)하거나, 에러(error)를 방출하는 RxSwift의 Observable 타입입니다.
즉, Single<Void>는 "성공했지만 반환할 값이 따로 없다"는 의미를 가집니다.
예제
func test(email: String) -> Single<Void> {
return Single.create { single in
do {
let request = try testTarget.test(email: email).asURLRequest()
AF.request(request)
.validate(statusCode: 200..<300)
.response { response in
switch response.result {
case .success:
single(.success(())) // ✅ 성공 (Void 반환)
case .failure(let error):
single(.failure(error)) // ❌ 실패
}
}
return Disposables.create()
} catch {
return Single.error(error)
}
}
}
🧐 언제 사용할까?
✅ API 응답 값을 사용하지 않고 성공/실패 여부만 필요할 때
✅ onSuccess(Void)를 방출해야 하는 경우
하지만 굳이 Void 값을 반환할 필요가 없다면 Completable을 고려하는 게 더 적절할 수도 있습니다.
✅ Completable ?
Completable은 값을 방출하지 않고, 단순히 "완료(completed)" 또는 "에러(error)"만 방출하는 RxSwift의 Observable 타입입니다.
즉, Completable은 Single<Void>에서 Void 값조차 필요 없을 때 사용하는 타입입니다.
📌 예제
func test(email: String) -> Completable {
return Completable.create { completable in
do {
let request = try TestTarget.test(email: email).asURLRequest()
let task = AF.request(request)
.validate(statusCode: 200..<300)
.response { response in
switch response.result {
case .success:
completable(.completed) // ✅ 성공 (값 반환 없음)
case .failure(let error):
completable(.error(error)) // ❌ 실패
}
}
return Disposables.create { task.cancel() }
} catch {
return Completable.error(error)
}
}
}
🧐 언제 사용할까?
✅ 성공/실패 여부만 중요하고, 반환값이 필요 없을 때
✅ 특정 작업(예: 로그아웃, 캐시 삭제 등)을 수행한 후 완료 상태만 전달할 때
🔥 주의점
- completable 사용시엔 return Disposables.create { task.cancel() } 을 작성하게 되는데
이는 성공 실패 유무를 방출하고 즉시 종료되어 알아서 정리되는 Single과 달리
예상치 못한 경우를 대비해야 하기때문에 명시해주는것이 좋습니다. (사용자가 화면을 나간다던가 등..)
'TIL' 카테고리의 다른 글
[Swift Concurrency] Structured Concurrency 구조적 동시성 (0) | 2025.04.15 |
---|---|
[Swift] Identifiable (0) | 2025.03.28 |
[Clean Architecture] DTO와 도메인 모델의 차이와 분리해서 사용해야하는 이유 (0) | 2025.03.13 |
[Swift] 유튜브처럼 타임라인 포맷팅하기 (1) | 2025.03.10 |
[Swift UIKit] Button Configuration 사용 시 의도치않은 inset 줄이기 (0) | 2025.02.07 |