为什么我在[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] 删除。
我来说两句