Swift语法错误?

时间:2014-08-04 23:48:33

标签: swift uistoryboardsegue

为什么我在这里收到[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)
                        }
                    })
            }
        }
    }
}
}

1 个答案:

答案 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
}

编译器似乎理解你正在定义一个调用该方法的闭包。