Ios 在调用UITapGestureRecognitor函数之前先进行Denit

Ios 在调用UITapGestureRecognitor函数之前先进行Denit,ios,swift,Ios,Swift,我正在为一个应用程序构建一个自定义对话框,我希望在其中使用闭包,当用户点击某个东西时会调用闭包,有点像这样: var modal = ModalDialog(title: "modal title", buttonClick: { () -> Void in println("clicked") }) modal.show() 因此,我创建了一个名为ModalDialog的类,其中有一个UITapGestureRecognitor,如下所示: v

我正在为一个应用程序构建一个自定义对话框,我希望在其中使用闭包,当用户点击某个东西时会调用闭包,有点像这样:

var modal = ModalDialog(title: "modal title", buttonClick: { () -> Void in
            println("clicked")
        })

modal.show()
因此,我创建了一个名为ModalDialog的类,其中有一个UITapGestureRecognitor,如下所示:

var modalTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: Selector("buttonClickAction:"))
modalView.addGestureRecognizer(modalTap)
我的问题是,由于ARC,当点击被实际识别并尝试调用ButtonClickaAction时:类已经被取消初始化,应用程序崩溃


在我明确告诉ARC去初始化模态之前,我如何防止ARC去初始化模态?

在视图控制器中保留模态对话框的强引用

    var dialog : ModalDialog

    func show {
        // Keep strong reference dialog by property of your view controller
        self.dialog = ModalDialog(title: "modal title", buttonClick: { () -> Void in
            println("clicked")
        })
        self.dialog.show()
    }

这就是我不知道该怎么做的,我在苹果书上看到过,这对我来说没有意义。ModalDialog是在视图控制器类中初始化的,但如何保持对它的强引用?