반응형
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 | 31 |
Tags
- github
- UIScrollView
- Firebase
- 다크모드
- NavigationLink
- Java
- gcd
- Swift
- SwiftLint
- autolayout
- 라이트모드
- remote config
- Alamofire
- LazyHStack
- subscript
- UITabBarController
- 문자열
- Realtime Database
- WebView
- string
- SwiftUI
- UIButton
- Observable
- Apple
- ios
- RxSwift
- swipe
- Android
- dictionary
- 웹뷰
Archives
- Today
- Total
점진적 과부하 개발 블로그
RxSwift Single, Maybe, Completable 알아보기 본문
반응형
RxSwift Single, Maybe, Completable 알아보기
Single
- .success(), .error()를 한번만 방출하는 Observable이다.
- .success() = next 이벤트와 completed 이벤트를 합친것과 같다.
- 정확히 한가지 연산자를 맵핑할때 유용하다.
print("------Single1------")
Single<String>.just("V")
.subscribe(
onSuccess: {
print($0)
},
onFailure: {
print("error: \($0)")
},
onDisposed: {
print("disposed")
}
)
.disposed(by: disposeBag)
print("------Single2------")
Observable<String>.just("V")
.asSingle()
.subscribe(
onSuccess: {
print($0)
},
onFailure: {
print("error: \($0)")
},
onDisposed: {
print("disposed")
})
.disposed(by: disposeBag)
- error
print("------Single2------")
Observable<String>.create { observer -> Disposable in
observer.onError(TraitsError.single)
return Disposables.create()
}
.asSingle()
.subscribe(
onSuccess: {
print($0)
},
onFailure: {
print("error: \($0)")
},
onDisposed: {
print("disposed")
})
.disposed(by: disposeBag)
- 결론 하나의 이벤트를 발생시키고 Observable 종료시키는 Single
print("------Single3------")
struct SomeJSON: Decodable {
let name: String
}
enum JSONError: Error {
case decodingError
}
let json1 = """
{"name":"park"}
"""
let json2 = """
{"my_name":"young"
"""
func decode(json: String) -> Single<SomeJSON> {
Single<SomeJSON>.create { observer -> Disposable in
guard let data = json.data(using: .utf8),
let json = try? JSONDecoder().decode(SomeJSON.self, from: data) else {
observer(.failure(JSONError.decodingError))
return Disposables.create()
}
observer(.success(json))
return Disposables.create()
}
}
decode(json: json1)
.subscribe {
switch $0 {
case .success(let json):
print(json.name)
case .failure(let error):
print(error)
}
}
.disposed(by: disposeBag)
decode(json: json2)
.subscribe {
switch $0 {
case .success(let json):
print(json.name)
case .failure(let error):
print(error)
}
}
.disposed(by: disposeBag)
Maybe
- Single과 비슷하지만 유일하게 다른점은 성공적으로 completed되더라도 아무런 값을 방출하지 않는 completed을 포함한다.
print("------Maybe1------")
Maybe<String>.just("V")
.subscribe(onSuccess: {
print($0)
},
onError: {
print($0)
},
onCompleted: {
print("completed")
},
onDisposed: {
print("disposed")
}
)
.disposed(by: disposeBag)
print("------Maybe2------")
Observable<String>.create { observer -> Disposable in
observer.onError(TraitsError.maybe)
return Disposables.create()
}
.asMaybe() // Observable을 asMaybe를 사용해 Maybe로 형변환
.subscribe(
onSuccess: {
print("성공: \($0)")
},
onError: {
print("에러 : \($0)")
},
onCompleted: {
print("completed")
},
onDisposed: {
print("disposed")
}
)
.disposed(by: disposeBag)
Completable
- .completed 또는 .error만을 방출합니다.
- Observable을 completable로 바꿀수는 없다.
- Completable Sequence를 생성하고 싶으면 create를 사용해야 한다.
print("------Completable1------")
Completable.create { observer -> Disposable in
observer(.error(TraitsError.completable))
return Disposables.create()
}
.subscribe(onCompleted: {
print("completed")
},
onError: {
print("error : \($0)")
},
onDisposed: {
print("disposed")
}
)
.disposed(by: disposeBag)
print("------Completable2------")
Completable.create { observer -> Disposable in
observer(.completed)
return Disposables.create()
}
.subscribe {
print($0)
}
.disposed(by: disposeBag)
Observable로 사용해도 되지만 좀 더 명시적이고 직관적인 코드 작성을 위해서 좀 더 제한적인 위에 3가지 아이템을 제시하고 있다.
반응형
'RxSwift' 카테고리의 다른 글
RxSwift Filtering Operator (0) | 2022.05.17 |
---|---|
RxSwift Subject 알아보기 (0) | 2022.05.16 |
RxSwift Observable 알아보기 (0) | 2022.05.12 |
RxSwift 설치하기 (0) | 2022.05.11 |
RxSwift 알아보기 (0) | 2022.05.10 |