self.navigationController?来自UIAlertController的.popViewControllerAnimated

时间:2014-11-05 16:11:40

标签: ios xcode swift uinavigationcontroller uialertcontroller

我是斯威夫特的新人,但我想我已经掌握了它。这让我的进步很难过。

我想要做的是当我们无法在他的查询中找到相关数据时向用户抛出错误消息,然后继续将他带回到之前的ViewController。

然而,我在这方面遇到了麻烦。在我添加操作的行上,我收到以下错误:' UIViewController?'不是Void的子类型

let alertController = UIAlertController(title: "Oops", message: "We couldn't find any data for this title, sorry!", preferredStyle: UIAlertControllerStyle.Alert)

alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
    self.navigationController?.popViewControllerAnimated(true)   
}))

我该怎么做?我错过了一些明显的东西吗我试着搞乱了不赞成使用的UIAlertView,但却没有变得更聪明。

1 个答案:

答案 0 :(得分:23)

只需在闭包体中添加一个明确的return语句:

alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { action in
    self.navigationController?.popViewControllerAnimated(true)
    return
}))

发生这种情况的原因是单个语句闭包被处理为返回值,因此编译器使用popViewControllerAnimated的返回值,这不足为奇UIViewController?。显式return语句避免了这种情况。

Implicit Returns from Single-Expression Closures

中记录了此行为