使用Swift的`guard`语句捕获不一致的应用程序状态?

时间:2019-01-25 09:14:47

标签: swift

我在Swift中有一个函数,如下所示:

@IBAction func doSomething(_ sender: AnyObject) { }

我需要将sender设置为NSMenuItem类型,所以我要加护卫检查它:

guard let menuItem = sender as? NSMenuItem else { return }

但是,如果我的应用程序逻辑中出现一些严重的错误,这将使应用程序继续运行,从而导致传递不同的对象类型。 仅仅使应用程序崩溃,而不是用神秘的无法正常工作的功能向用户“展示”会更好吗?

检查这些超基本假设并做出反应的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

请注意,您可以这样编写@IBAction

@IBAction func doSomething(_ sender: NSMenuItem)

sender不必是AnyObject

在其他情况下,如果您想使用guard语句崩溃,则可以执行以下操作:

guard ... else { fatalError("a message") }

fatalError返回Never,因此可以在else子句中使用。