業務の中で使われていた手法を理解するために自分なりに単純化してみました。
擬似API処理
// APIを叩くメソッド
func api(closure: (ApiResult) -> Void) {
// APIを叩く処理
// APIから返ってきた結果
closure(.SUCCESS)
}
// APIの通信結果
enum ApiResult {
// 成功
case SUCCESS
// 失敗
case ERROR
}
enum
を使って発生しうる結果分岐を用意しておきます。作成した分岐経路を擬似的に作ったAPIを叩くメソッドのclosure
に渡し、結果がどのcase
に当てはまるかを返してもらいます。
メソッドの呼び出し
メソッドを呼び出して、switchを使い結果毎にやってほしい処理を追加します。
api { result in
// resultにapi()の結果が入っている
switch result {
// 成功だった時の処理
case .SUCCESS:
print("SUCCESS")
// 失敗だった時の処理
case .ERROR:
print("ERROR")
}
// 出力結果 "SUCCESS"
api()
で.SUCCESS
を返しており、result
の中には.SUCCESS
が入っているので、
結果として"SUCCESS"
が返されます。
参考記事
Swiftのクロージャによるコールバックの説明 - Qiita
間違っている点等あればご指摘いただけると幸いです。