【发布时间】:2016-04-12 21:20:10
【问题描述】:
在异步执行的块/闭包中,我想在执行该块中的任何内容之前检查我的当前状态。
一个常见的例子是在 NSURLsession 请求之后继续到下一个视图控制器。
这是一个例子:
@IBAction func tappedButton(sender: UIButton) {
//This closure named fetchHistorical goes to the internet and fetches an array
//The response is then sent to the next view controller along with a segue
Order.fetchHistorical(orderID, completionHandler: { (resultEnum) -> () in
switch resultEnum {
case .Success(let result):
let orderItemsArray = result.orderItems!.allObjects
self.performSegueWithIdentifier("showExchanges", sender: orderItemsArray)
default:
let _ = errorModal(title: "Error", message: "Failed!")
}
})
}
假设用户不耐烦并点击了此按钮 3 次。
这意味着该函数将被调用 3 次,并且每次它都会尝试转到下一个视图控制器(iOS 很好地通过“警告:尝试在其上显示不在窗口层次结构中的视图!”来阻止这个问题! )
我想知道你们是如何解决这个问题的?是否类似于...在闭包中,检查您是否仍在当前的视图控制器中...如果您在,那么 segueing 是有效的。如果没有,您可能已经转场并且不再执行转场。
***更一般地说,由于闭包是异步执行的,您如何检查闭包中的当前状态?
【问题讨论】: