Ios 如何使用完成处理程序正确关闭模态viewcontroller

Ios 如何使用完成处理程序正确关闭模态viewcontroller,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有viewController1和viewController2,这是modaly提供的,我想在取消第二个时使用完成处理程序,但我无法获得实现。我想我必须写一个函数,然后把它放在那里,就像: viewController.dismissViewControllerAnimated(true, completion: funcToCall()) 但是我得到了这个错误: 无法将类型为“()”的值转换为所需的参数类型“(()-> “无效”?” 任何人都可以向我解释,我如何正确执行完成处理程序,请?

我有
viewController1
viewController2
,这是modaly提供的,我想在取消第二个时使用完成处理程序,但我无法获得实现。我想我必须写一个函数,然后把它放在那里,就像:

viewController.dismissViewControllerAnimated(true, completion: funcToCall())
但是我得到了这个错误:

无法将类型为“()”的值转换为所需的参数类型“(()-> “无效”?”


任何人都可以向我解释,我如何正确执行完成处理程序,请?

非常简单,将
funcToCall()
作为
completion
参数传递(重要提示-我在这里使用大括号):

A
完成
参数文档:

解除视图控制器后要执行的块。此块没有返回值,也不接受任何参数。您可以为此参数指定nil


只需删除括号并将函数名作为参数传递,如下所示:

viewController.dismissViewControllerAnimated(true, completion: funcToCall)
只要您的函数
funcToCall
type()->Void
like,它就可以工作

func funcToCall() {  
    // do something
}

然后问题是我没有使用花括号?然而,这是可行的,但似乎只是部分。当我尝试呈现一个新的viewController时,仍然会出现以下错误:尝试呈现其视图不在窗口层次结构中的viewController3!但不知何故,它呈现了它。我快发疯了。我会尽量解释清楚的。我用completion:notification and observer在vc1中解除vc2,当vc2被解除时触发segueWithIdentifier,但随后我得到了“试图呈现视图不在窗口层次结构中的viewController3!”错误。现在我仍然得到它,但是segue被执行了,我不确定这是否会带来未来的问题。哦,这是另一个错误。请检查此线程-我认为问题出现是因为vc2未完全排除。我不确定此步骤是否适用于此问题,因为当我更改演示VC的方式(即模式演示)时,我收到以下警告消息:“警告:在演示进行中尝试在vc1上演示vc3!”我应该发布一个新问题来解释这个问题吗?编辑:这就是为什么我认为问题在于vc3显示时vc2仍处于活动状态
func funcToCall() {  
    // do something
}