RxSwift/Cocoa - Traits
RxSWIFT/Cocoaが所有するTraitを簡単に紹介
RxSwift
1. Single
Observerableと似ていますが、Singleは無限個数のコミットとは異なり、1つの値またはErrorのみをコミットします.
Successは
[onNext&onCompleted]が追加されたEmit Eventと言えます
応答/エラーのみを返すHTTPリクエスト応答を処理する場合のように、単一要素の応答、エラーを処理する場合に便利です.
基本的にSingleはObservableの変体と見なすこともでき,Observableのオペレータを用いることができる.
func getRequest(url: String?) -> Single<Bool> {
// Bool 타입의 Single 생성
return Single<Bool>.create { single in
guard let url = url else {
// 매개변수로 들어온 url 이 nill 일경우 single은 error를 방출한다.
// 생명주기 종료
single(.error(NSError.init(domain: "error", code: -1, userInfo: nil)))
return Disposables.create()
}
// 그렇지 않을 경우 if 를 통해서 조건에 맞는 값을 success 할수 있다.
if url == "https://www.google.com" {
single(.success(true))
} else {
single(.success(false))
}
return Disposables.create()
}
}
getRequest(url: )
.subscribe(onSuccess : { success in
}.onError : { error in
})
.disposed(by : disposBag)
2.Completable要素は伝達されず、エラー/完了した観測可能な変形のみが伝達されます.
正常に完了したかどうかを知るだけで使用できます.(データベースにデータを格納するかどうかなど)
Completableは他のバリエーションと異なり、ObserverableをCompletableに変更することはできません.
let disposeBag = DisposeBag()
let completable = Completable.create { event in
let someError = false
if someError {
event(.error(“Error”))
}else {
event(.completed)
}
return Disposables.create {
print(“DDD”)
}
}
// 사용
completable.subscribe(onCompleted : {
print( “Event” )
}) { (error) in
print(“error”)
},disposed(by: disposBag )
3. MaybeSuccess、Completed、Error Eventをコミットします.
Elementを送信します.
要素をエクスポートせずに、単一の要素、完全またはエラーをエクスポートすることもできます.
キャッシュからデータを取得するために使用します.
private let disposeBag = DisposeBag()
public enum SomeError: Error {
case genericError(String)
}
let maybe = Maybe<String>.create { event in
let dividend = Int.random(in: 20...30)
let divisor = Int.random(in: 0...5)
if divisor == 0 {
event(.error(SomeError.genericError("Divisor is 0")))
} else {
let value = dividend / divisor
if value > 5 {
event(.success("Number is greater than 5"))
} else {
event(.completed)
}
}
return Disposables.create {
print("Disposed trait resources")
}
}
// 사용
maybe.subscribe(onSuccess: { (value) in
print("Value is \(value)")
}, onError: { (err) in
print("Error is \(err.localizedDescription)")
}) {
print("Completed Event")
}.disposed(by: disposeBag)
RxCocoa基本的に、RxcocaはUIを使用するときにコードを簡単に直感的に記述することができる.
ココアの特徴には共通点がたくさんあります.
エラーは転送されません.
MainSchedulerで購読します.
信号共有なし
let idVaild = idTF.rx.text.orEmpty.map(idCheck(_:))
let pwVaild = pwTF.rx.text.orEmpty.map(pwCheck(_:))
// Observable.combineLatest(idVaild, pwVaild) { $0 && $1 }
// .observe(on: MainScheduler.instance)
// .catchAndReturn(false)
// // completd / dispose 났을경우 처리를 못하기위해 작성되는 코드
// .materialize() // completd / dispose 를 무시
// .dematerialize()
// .subscribe(onNext: {
// print($0)
// }).disposed(by: disposeBag)
Observable.combineLatest(idVaild, pwVaild) { $0 && $1 }
.asDriver(onErrorJustReturn: false) // completd / error 무시
.drive(onNext: { // MainThread 로 변경됨
print($0)
}).disposed(by: disposeBag)
長いコードはDriverに大幅に減少しました.Signal
Driverに似ています.
public func asSignal(onErrorRecover: @escaping (_ error: Swift.Error) -> Signal<Element>) -> Signal<Element> {
let source = self
.asObservable()
.observeOn(SignalSharingStrategy.scheduler)
.catchError { error in
onErrorRecover(error).asObservable()
}
return Signal(source)
}
ControlEvent決して失敗しない.
Subscriberに秒針を送信しません.
ベースが解放されたときに完了します.
Main schedulerは購読を保証します.(subscribeOn(ConcurrentMainScheduler.instance))
MainScheduler.instance イベントが転送されます.
ControlProperty
UI要素の属性を表します.
失敗はありません.
Share(再放送:1)のように行動します.
プライマリ・スケジューラで購読します.
Reference
この問題について(RxSwift/Cocoa - Traits), 我々は、より多くの情報をここで見つけました https://velog.io/@leejinseong9410/RxSwiftCocoa-Traitsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol