Swift语法错误?

杰克

为什么我在[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)
                        }
                    })
            }
        }
    }
}
}
康纳

似乎由于您的闭包中只有一个方法调用,因此它试图将该方法存储在popClosure中。

 func popToViewController(viewController: UIViewController!, animated: Bool) -> [AnyObject]!

因为返回了一个方法[AnyObject]!,所以popClosure返回的[AnyObject]!与其声明的类型不符() -> Void

您可以通过在闭合中添加另一行来解决此问题。它不需要做任何事情。正如rickster所建议的那样,在此示例中,我只是向闭包添加了一个返回值。

var popClosure: () -> Void = { () -> Void in
    presentingController!.popToViewController(dest!, animated: false)
    return
}

然后,编译器似乎理解您正在定义一个在其中调用该方法的闭包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章