在異步執行的塊/閉包內,我希望在執行塊之前檢查當前狀態。檢查塊/關閉完成後的當前視圖狀態
這是一個常見的例子,它出現在NSURLsession請求之後,繼續延伸到下一個View Controller。
下面是一個例子:
@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次。
這將意味着這個函數將被調用三次,並且每次它會試圖延續到下一個視圖控制器(iOS很好地阻止了這個問題,「警告:嘗試呈現其視圖不在窗口層次結構中! 「)
我想知道你們如何解決這個問題?是否像封閉內的東西,檢查你是否仍然在當前的視圖控制器中...如果你是,那麼繼續是有效的。如果不是的話,你可能已經陷入困境,並且不會再次執行這個segue。
***更一般地說,你如何檢查閉包內的當前狀態,因爲閉包是異步執行的?