捕获与 Swift 的"守卫"语句不一致的应用程序状态?



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

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

我需要senderNSMenuItem 型,所以我用警卫检查它:

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

但是,如果我的应用程序逻辑中存在一些严重错误,这将静默地让应用程序继续,从而导致传递不同的对象类型。只是使应用程序崩溃,而不是向用户"呈现"一个神秘的非工作功能,这不是更好吗?

检查和应对这些超基本假设的最佳方法是什么?

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

@IBAction func doSomething(_ sender: NSMenuItem)

sender不必AnyObject.

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

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

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

最新更新