self.navigationController?.popViewControllerAnimated from UIAlertController

偶尔善良 提交于 2019-12-07 00:22:53

问题


I'm new to swift but I think I'm getting a hang of it. This stumped my progress pretty hard though.

What I want to do is to throw an error message to the user when we can't find relevant data to his query, and then proceed to take him back to the previous ViewController.

However, I'm having real trouble doing this. On the line where I add the action I get the following error: 'UIViewController?' is not a subtype of 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)   
}))

How do I do this? Am I missing something obvious? I tried messing around with the deprecated UIAlertView but became none the wiser.


回答1:


Just add an explicit return statement in the closure body:

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

The reason why that happens is that a single statement closure is handled as the return value, so the compiler uses the return value of popViewControllerAnimated, which unsurprisingly is a UIViewController?. The explicit return statement avoids that.

This behavior is documented in Implicit Returns from Single-Expression Closures



来源:https://stackoverflow.com/questions/26761835/self-navigationcontroller-popviewcontrolleranimated-from-uialertcontroller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!