swift:如何从两个单独的方法执行相同的闭包

时间:2016-02-25 16:40:51

标签: ios swift closures

我有一种情况,我有功能说

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的完成块。我怎样才能做到这一点?

2 个答案:

答案 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函数中,调用保存到实例变量的块。