LoginSignup
2
1

More than 5 years have passed since last update.

[Swift4] APIKitのリクエスト実行をシンプルに書く

Last updated at Posted at 2018-06-18

ビフォー&アフター

ビフォー

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.SendIndicatorの表示セッションのタイムアウト時の処理など

アフター

コールバックの処理をクロージャーで渡して呼び出せるようにした。
ざっくりこんな感じ↓

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) }

おわりに

もっと良い方法ありそう...アドバイス等あれば是非コメントください:pray:

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1