ios - dispatch_after 错误 : '[AnyObject]?' is not a subtype of 'Void'

标签 ios swift grand-central-dispatch

我正在尝试用这段代码做一个非常简单的弹出到 Root View Controller 的延迟:

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]?'不是 'Void' 的子类型 我假设它与在 block /闭包内调用 self.navigationController 有关,因为如果我注释掉该行并替换为 println("Will this compile") 它有效。

有人可以解释为什么我会收到此错误以及实现我想要做的事情的正确方法是什么吗?

Xcode 6.1.1

谢谢。

最佳答案

在 swift 单语句闭包中自动返回语句返回值。在您的特定情况下,它试图返回 [AnyObject]? 的实例,这是 popToRootViewControllerAnimated 的返回值。 dispatch_after 期望的闭包是 Void -> Void。由于闭包返回类型不匹配,编译器会对此进行提示。

要解决这个问题,只需添加一个明确的 return 语句:

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

关于ios - dispatch_after 错误 : '[AnyObject]?' is not a subtype of 'Void' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314885/

相关文章:

ios - 空格取决于宽度 iOS

iphone - 如何使用 GCD 在主线程上延迟后安全地分派(dispatch)代码?

ios - 从应用程序检索的数据显示的数据与解析数据浏览器不同

iphone - 将文件从包复制到文档路径时显示进度条

ios - SwiftUI 披露组文本对齐

ios - 带有垂直对齐图像的自定义 UITabBar

objective-c - 风险评估 : Using Pthreads (vs. GCD 或 NSThread)

objective-c - iOS 6 中用于完成 block 的 dispatch_get_current_queue() 的替代方案?

iphone - 核心数据 NSFetchRequest 在删除对象和重新获取数据后返回未排序的数组

iOS 和 CouchDB 复制