私のアプリは、サーバー呼び出し時にユーザーを認証するために短い有効期限タイマーを持つアクセストークンを使用します。有効期限が切れたトークンでコールが行われると、サーバーは402ステータスで応答し、ユーザーはサーバーに新しいアクセストークンを返送するように促す更新トークンを送信する必要があります。私は最初の場所と同じ引数を使って同じサーバー呼び出しを行う必要がありますが、新しいアクセストークンを使用する必要があります。このプロセスを自動化して、トークンの交換が行われるようにするには、どのようなユーザー入力も必要とせずに最初に必要としていたリソースを取得します(つまり、すべてバックグラウンドで実行されます。私はそうのような恐ろしいネストされた呼び出しを行う伴わない方法を考えるカント:トークン交換用の再帰的コールバックを作成する方法、Swift
someAPICall(foo, arg2: bar) { result, error in
if let result = result {
if result.status == 402 {
performTokenExchange(refreshToken) { newAccessToken, error in
if newToken {
someAPICall(foo, bar) { result, error in
//...
}
}
}
}
else {
// ... continue with program
}
}
}
私の最初の考えは絵に再帰を持参し、再帰的に「performTokenExchange」コールバックの中に「someAPICall」を呼び出すことであろう、しかし私は "performTokenExchange"コールバックの中で明示的にそれを管理せずに "someCall"を扱う方法を知らず、私の "恐ろしいネストされた呼び出し"の問題で私を戻します。
だからsomeAPICallはあなた自身では書いていないが、完了クロージャを呼び出して渡すことができる所定の関数ですか?あなたの関数名の前に 'func'を使っているので、私は尋ねています。 – Keiwan
@Keiwanおっと!私の一部で間違い - 「someAPICall」のインスタンスを表示することを意図していました。私が書いた機能は非常に多く、私のコードを編集しました。 –