我有一种情况,我有功能说
func openViewController(completion:(success:Bool) -> Void)
{
//code here to present some view controller name MYVC
self.presentViewController(myVC, animated: true, completion: {
})
}
从MYVC开始,我在同一个类的下面的函数中调用了回调,就像我在openViewController上面调用的方法一样
func handleDismissOfVC(){
self.dismissViewControllerAnimated(true, completion:{
})
}
现在我面临的挑战是当我用handleDimissOfVC()解除视图控制器时,调用带有成功标志的openViewController的完成块。我怎样才能做到这一点?
答案 0 :(得分:0)
您需要将完成功能块作为属性提供给MyVC,如下所示:
class MyVC {
// Completion callback for when this VC is dismissed.
var complete: ((success: Bool) -> Void)?
func dismiss() {
self.dismissViewControllerAnimated(true, completion:{
if let c = complete {
c(success: true)
}
})
}
}
func openViewController(completion:(success:Bool) -> Void) {
// Pass the completion block to the VC.
myVC.complete = completion
self.presentViewController(myVC, animated: true, completion: {
})
}
我认为应该这样做。虽然看起来它可能更适合委托模式,具体取决于原始块的来源。
答案 1 :(得分:0)
您需要创建一个实例变量来保存闭包。在openViewController中,将闭包保存到该实例变量。
在handleDismissOfVC函数中,调用保存到实例变量的块。