我尝试编写一系列功能,在要求他们确认某些内容之前验证用户的信息。 (想象一下购物应用程序)。
我可以编写异步方法来检查卡片......
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 {
hasCard in
if hasCard {
print("YAY!")
} else {
print("BOO!")
}
}
但是......现在,基于我必须做各种事情。如果用户确实有卡,那么我需要继续向前并检查是否有足够的余额(以同样的方式)。如果用户没有卡,我会出示一个屏幕,供他们添加卡片。
但它变得混乱......
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!")
}
}
我想要的是这样的......
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"但我不确定如何接近这样的事情。
有办法吗?
答案 0 :(得分:6)
异步操作,有序和依赖?您正在描述NSOperation。
当然,您可以使用GCD链接任务:
DispatchQueue.main.async {
// do something
// check something...
// and then:
DispatchQueue.main.async {
// receive info from higher closure
// and so on
}
}
但如果您的操作很复杂,例如他们有代表,这个架构完全崩溃了。 NSOperation允许以您之后的方式封装复杂的操作。