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

时间:2014-12-05 11:26:46

标签: ios swift grand-central-dispatch

我正在尝试使用以下代码执行非常简单的弹出到根视图控制器的延迟:

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

谢谢。

1 个答案:

答案 0 :(得分:6)

在swift单语句中,闭包会自动返回语句返回值。在您的特定情况下,它正在尝试返回[AnyObject]?的实例,这是popToRootViewControllerAnimated的返回值。 dispatch_after预期的结果是Void -> Void。由于闭包返回类型不匹配,编译器会抱怨这一点。

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

dispatch_after(time, dispatch_get_main_queue(), {
    self.navigationController?.popToRootViewControllerAnimated(true)
    return
    ^^^
})