我正在尝试使用以下代码执行非常简单的弹出到根视图控制器的延迟:
let delay = 1 * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
self.navigationController?.popToRootViewControllerAnimated(true)
})
然而我收到错误'[AnyObject]?' is not a subtype of 'Void'
我认为它与在块/闭包内调用self.navigationController
有关,因为如果我注释掉该行并用println("Will this compile")
替换它的工作原理。
有人可以解释为什么我会收到此错误以及实现我想要做的正确方法是什么?
Xcode 6.1.1
谢谢。
答案 0 :(得分:6)
在swift单语句中,闭包会自动返回语句返回值。在您的特定情况下,它正在尝试返回[AnyObject]?
的实例,这是popToRootViewControllerAnimated
的返回值。 dispatch_after
预期的结果是Void -> Void
。由于闭包返回类型不匹配,编译器会抱怨这一点。
要解决此问题,只需添加一个显式的return语句:
dispatch_after(time, dispatch_get_main_queue(), {
self.navigationController?.popToRootViewControllerAnimated(true)
return
^^^
})