ビフォー&アフター
ビフォー
before.swift
let request = HogeRequest() // 自身で定義したリクエストの生成
Session.send(request) { result in
switch result {
case .success(let response):
dump(response)
// 色々やる
case .failure(let err):
print(err)
// 色々やる
}
}
個人的に感じていた問題点
- コールバックの処理が長くなってくると、全体の見通しが悪くなる
- 似たような処理を各所に何回も書く ←
Session.Send
やIndicatorの表示
やセッションのタイムアウト時の処理
など
アフター
コールバックの処理をクロージャーで渡して呼び出せるようにした。
ざっくりこんな感じ↓
after.swift
let request = HogeRequest()
let prepare = {() -> Void in print("Indicatorの表示とかとか")}
let success = {(response:HogeResponse, _:HogeRequest) -> Void in
print("test")
dump(response)
}
let error = {(err: SessionTaskError) -> Void in print(err)}
doRequest(request: request, prepare: prepare, success: success, error: error)
// doRequestの定義
func doRequest<T>(
request: T,
prepare: ()-> Void = prepare_default,
success: @escaping (T.Response, _: T)-> Void = success_default,
error: @escaping (SessionTaskError)-> Void = error_default) where T:Request {
prepare()
Session.send(request) { result in
switch result {
case .success(let response):
success(response, request)
case .failure(let err):
error(err)
}
}
}
// 各クロージャーのデフォルト処理
func prepare_default(){}
func success_default<T: Request>(response: T.Response, _: T){ dump(response) }
func error_default(err: SessionTaskError){ print(err) }
おわりに
もっと良い方法ありそう...アドバイス等あれば是非コメントください