为什么我在这里收到[AnyObject]! is not convertible to 'Void'
错误?我只是没有看到一些语法错误或什么?
var popClosure = {()->Void in presentingController!.popToViewController(dest!, animated: false)}
只有在此方法中调用一次:
src!.dismissViewControllerAnimated(true, completion: popClosure)
这里是完整的代码:
class ColorfulUnwindSegue : UIStoryboardSegue
{
private let ANIMATION_DURATION = 0.5
override func perform()
{
var dest = self.destinationViewController as? UIViewController
var src = self.sourceViewController as? UIViewController
if src && dest
{
dest!.view.frame = CGRectMake(-dest!.view.frame.size.width, 0, dest!.view.frame.size.width, dest!.view.frame.size.height)
var srcIsModal = false
var presentingController = src!.navigationController as? ColorfulNavigationController
if src!.presentingViewController as? ColorfulNavigationController
{
srcIsModal = true
presentingController = src!.presentingViewController as? ColorfulNavigationController
}
if presentingController
{
if srcIsModal
{
var popClosure : ()->Void = {()->Void in presentingController!.popToViewController(dest!, animated: false)}
src!.dismissViewControllerAnimated(true, completion: popClosure)
}
else
{
src!.view.layer.addSublayer(dest!.view.layer)
UIView.animateWithDuration(ANIMATION_DURATION,
animations:
{()->Void in
src!.view.frame = CGRectMake(dest!.view.frame.size.width, 0, src!.view.frame.size.width, src!.view.frame.size.height)
},
completion:
{(finished:Bool)->Void in
if finished
{
presentingController!.popToViewController(dest!, animated: false)
}
})
}
}
}
}
}
答案 0 :(得分:2)
似乎因为你在闭包中只有一个方法调用,它试图将该方法存储在popClosure中。
func popToViewController(viewController: UIViewController!, animated: Bool) -> [AnyObject]!
因为一个方法返回[AnyObject]!
,所以popClosure返回[AnyObject]!
,它与其声明的类型() -> Void
不匹配。
您可以通过在闭包中添加另一行来解决此问题。它不必做任何事情。正如rickster建议的那样,在这个例子中,我只是在闭包中添加一个返回。
var popClosure: () -> Void = { () -> Void in
presentingController!.popToViewController(dest!, animated: false)
return
}
编译器似乎理解你正在定义一个调用该方法的闭包。