私は何かを確認する前にユーザの情報を検証する一連の関数を記述しようとしています。 (ショッピングアプリを想像してみてください)。Swiftで複数の非同期関数を連結する
- まず、ユーザーがカードを追加したことを確認する必要があります。
- 次に、十分なバランスがあることを確認する必要があります。
- 次に、お支払いを確認するように依頼することができます。
私は、これは今
checkHasCard {
hasCard in
if hasCard {
print("YAY!")
} else {
print("BOO!")
}
}
しかし... ...このように実行することができます
func checkHasCard(completion: (Bool) ->()) {
// go to the inter webs
// get the card
// process data
let hasCard: Bool = // the user has a card or not.
completion(hasCard)
}
...カードのようなものをチェックするために非同期メソッドを書くことができますそれに基づいて私はいろいろなことをしなければならない。ユーザーがカードを持っている場合、私は引き続き進む必要があり、十分にバランスが取れていることを確認する必要があります(ほぼ同じ方法で)。ユーザーがカードを持っていない場合は、カードを追加するための画面が表示されます。
checkHasCard() // if no card then show card details screen
.checkBalance() // only run if there is a card ... if no balance ask for top up
.confirmPayment()
これは、はるかに「swifty」私に見える私が代わりに好きな本の線に沿って何かあるだろうと何
checkHasCard {
hasCard in
if hasCard {
// check balance
print("YAY!")
checkBalance {
hasBalance in
if hasBalance {
// WHAT IS GOING ON?!
print("")
} else {
// ask to top up the account
print("BOO!")
}
}
} else {
// ask for card details
print("BOO!")
}
}
...
しかし、それは乱雑ます...このようなものに近づく方法がわからない。
方法はありますか?
https://github.com/mxcl/PromiseKitのようなものを使用することができます –
反応性パラダイム(ReactiveCocoaとRXSwiftライブラリの両方)を見てみましょう。この種の抽象化には便利です。明らかに、ここに必要なものよりも多くの機能がテーブルにもたらされます。 –