Today、RxSWIFTを使用したネットワークの例を知っています.
今日はRxSWIFTによるネットワーク通信について解説します.
ネットワーク通信を行うには、次の手順に従います.
1.URLの設定
まずObservableを作成します.ジェネレータデザイナを使用して、希望するように作成できます.URL Stringを1つだけ渡すためにjustを使いました. 現在のデータ型は String->URLに変換されました. 2.要求完了後、要求
URLを作成すると、「URLリクエスト」に置き換えることで、リクエスト可能な形式に変更できます.以前のようにmapを使います.
FlatMapのプロパティ
ストリームから放出されたコンテンツを別のファイババブルにする.
「最初の傍観者バブルからのI.TAM->FlatMap傍観者バブルI.TAM」はこのように行われます最初の傍観者から3つのof演算子が送られた場合,flatMapで生成された傍観者が4つのofを持つと仮定すると, 一番早い:Observable.の(1,2,3)->3個 FlatMap傍観者バブル:観測不可.の(「a」,「b」,「c」,「d」)->4個 仮にそうだとしたら、は、初期ファイバフォーム1->FlatMapファイバフォームa,b,c,dに放出する である.は、初期ファイバフォーム2->FlatMapファイバフォームa,b,c,dに放出する である.は、初期ファイバフォーム3->FlatMapファイバフォームa,b,c,dに放出する である.は、初期ファイバフォーム4->FlatMapファイバフォームa,b,c,dに放出する である.
購読すると、このようにイベントが公開されます.
したがって、最初の傍観者Bubbleが1つのアクティビティだけを渡すと、FlatMap傍観者Bubbleは自分が解放するアクティビティを乗算します.
gugugudanが2段だけ入力して1~9を生成したように
しかし、私たちの例では、justで1つだけ伝達することを定義しているので、このようなことは起こりません.
トピックに戻り、rxでサポートされているURLセッションを使用してFlatMapでファイバチャネルを再作成します.
受信した200〜299個の応答のみをフィルタリングし,通常の通信時のデータのみをフィルタリングした.データパラメータは使用されません.ワイルドカードモードを使用できます. 4.応答のデータ加工
エラーをフィルタしました.受信したデータをシリアル化します.今回のコードも応答を使用しないので、ワイルドカードモード処理を行ってみてはいかがでしょうか. mapオペレータは、 jsonを用いてシリアル化した後、タイプ選択に成功した結果を返すことができる. データが作成されました.しかし、受け取ったデータもゼロになる可能性があります.つまり、Getリクエストはデータを受信していない可能性があります.私はこれに対して処理します.現在の フィルタ演算子は、データの値が0より大きい場合にのみ使用できます. UIの更新により、データを必要なデータモデルに変換できます.ここでは、任意に設定したモデルを使用してコードを記述します. (UserInfoがランダムに作成したDecodable Struct.)パラメータは[String:Any]である.これらの値を定数として宣言し、最終的にデータをstructに構造化します. 5.UIの更新
今購読して傍観者Bubbleを実行すればいいですよね?を購読すると、 です.
整理するの広い範囲から見ると、タイプはこのように変化している.Observable< String > -> Observable< HTTPResponse, Data > -> UserInfo URLSSession+Rxを使用してネットワークに接続します. が最終的に完了したデータ. 読んでくれてありがとう^^
ネットワーク通信を行うには、次の手順に従います.
1. URL 구성
2. Request 구성 후, 요청
3. 응답에 대한 에러처리
4. 응답에 대한 데이터 가공
5. UI 업데이트
1~5段階を見ると、1つのシーケンスと考えられますよね?したがって、Observableで定義することができる.そして必要な時点で対応するOverBubbleを購読すればいいです私はこれがMVCモードだと仮定して、私がすぐに購読してUITableViewに更新すると仮定して、私はコードを書きます.1.URLの設定
まずObservableを作成します.
Observable.just(urlString)
Observable<String>
です.Observable<String> -> URL
次のようにタイプを変更します.ではmap
でよろしいでしょうかObservable.just(urlString)
map. { urlString -> URL in
return URL(string: urlString)!
}
URLを作成すると、「URLリクエスト」に置き換えることで、リクエスト可能な形式に変更できます.以前のようにmapを使います.
.map { url -> URLRequest in
var request = URLRequest(url: url)
request.httpMethod = "GET"
return request
}
実際のリクエストの後、Observerableを再作成します.今回はrxでサポートされているURLセッションを使用します.今回はFlatMapでFlatMapのプロパティ
ストリームから放出されたコンテンツを別のファイババブルにする.
「最初の傍観者バブルからのI.TAM->FlatMap傍観者バブルI.TAM」はこのように行われます最初の傍観者から3つのof演算子が送られた場合,flatMapで生成された傍観者が4つのofを持つと仮定すると,
購読すると、このようにイベントが公開されます.
したがって、最初の傍観者Bubbleが1つのアクティビティだけを渡すと、FlatMap傍観者Bubbleは自分が解放するアクティビティを乗算します.
gugugudanが2段だけ入力して1~9を生成したように
しかし、私たちの例では、justで1つだけ伝達することを定義しているので、このようなことは起こりません.
トピックに戻り、rxでサポートされているURLセッションを使用してFlatMapでファイバチャネルを再作成します.
.flatMap { request -> Observable<(response: HTTPResponse, data: Data)> in
return URLSession.shared.rx.response(request: request)
}
3.応答エラー処理受信した200〜299個の応答のみをフィルタリングし,通常の通信時のデータのみをフィルタリングした.
.filter { (response, data in
return 200..<300 ~= response.statusCode
}
エラーをフィルタしました.受信したデータをシリアル化します.
.map { (response, data) -> [[String: Any]] in
guard let json = try? JSONSerialization.jsonObject(with: data, options: []),
let result = json as? [[String: Any]] else { return [] }
return result
}
.filter { filteredResponse in
return filteredResponse.count > 0
}
filteredResponse
のタイプは[String:Any]です..map { finalResponse in
return finalResponse.compactMap { dic -> UserInfo in
guard let userID = dic["userId"] as? Int
let userName = dic["username"] as? String
let userEmail = dic["email"] as? String
let userPhone = dic["phoneNum"] as? String
else { return nil }
return UserInfo(userID, userName, userEmail, userPhone)
}
}
今購読して傍観者Bubbleを実行すればいいですよね?
.subscribe(onNext: { [unown self] response in
self.tableViewDataModel.onNext(response)
DispatchQueue.main.async {
self.tableView.reloadData()
}
})
tableViewDataModel
という名前があります.これは私が勝手につけた名前です.private let tableViewDataModel = BehaviorSubject<[UserInfo]>(value: [])
こうして宣言した見るとBehaviorSubject
イベントがファイバまたはサブアイテムに送信される場合は、初期値とともにサブスクライバに送信されるサブアイテムです.これは、tableviewで使用するために、ネットワーク通信の結果をサブオブジェクトに渡すための足場石です.もちろん、RxDataSourceを使用して実装する場合は、ネットワークに集中するために異なる方法で実装します.整理する
Reference
この問題について(Today、RxSWIFTを使用したネットワークの例を知っています.), 我々は、より多くの情報をここで見つけました https://velog.io/@kipsong/Today-I-learned-RxSwift를-이용한-네트워킹-예제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol