dispatch_after错误:'[AnyObject]?' 不是'Void'的子类型

sba*_*row 1 grand-central-dispatch ios swift

我试图用这段代码做一个非常简单的延迟弹出到根视图控制器:

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)
})
Run Code Online (Sandbox Code Playgroud)

然而我得到的错误'[AnyObject]?' is not a subtype of 'Void'我认为它与调用self.navigationController块/闭包内部有关,因为如果我注释掉那行并用println("Will this compile")它替换就行了.

有人可以解释为什么我收到这个错误,以及实现我想要做的正确方法是什么?

Xcode 6.1.1

谢谢.

Ant*_*nio 6

在swift单语句中,闭包会自动返回语句返回值.在您的特定情况下,它试图返回一个实例[AnyObject]?,它的返回值popToRootViewControllerAnimated.预期的关闭dispatch_afterVoid -> Void相反的.由于闭包返回类型不匹配,编译器会抱怨这一点.

要解决此问题,只需添加一个显式的return语句:

dispatch_after(time, dispatch_get_main_queue(), {
    self.navigationController?.popToRootViewControllerAnimated(true)
    return
    ^^^
})
Run Code Online (Sandbox Code Playgroud)