当守卫失败时该怎么办

What To Do When a Guard Fails

我的问题基本上是,当守卫失败时,有哪些正常的事情要做?我主要是在 iOS 应用程序的上下文中询问,其中用户交互请求发生某事并且现在必须执行某事。由于 Swifts 类型安全(我喜欢这一点),我们现在可以处理可选值。

这是一个例子:

guard let textField = (tableView.cellForRow(at: IndexPath(row: 0, section: 1)) as? TextInputTableViewCell)?.inputField else {
     print("Couldn't get the keyboard when a user clicked on done, method: accesoryKeyboardDone")
     return
}

通常,我会记录失败并 return,或者如果存在值很重要,我会 fatalError 退出该方法。这似乎是错误的方法?有什么方法可以回退到更好的情况并仍然执行用户要求的操作吗?我喜欢安全地解包值,即使我需要它们在那里,因为强制解包让我感觉很脏,好像我没有做正确的事情。这是我应该做的事情还是在这些情况下可以接受强制展开?

您处理可选值的方式有哪些?我真的只是在寻找其他人如何处理它的意见和技巧。

谢谢!

UIAlertController 中显示错误消息。

let alertController = UIAlertController(title: "Default Style", message: "A standard alert.", preferredStyle: .Alert)

let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { action in
    // ...
}
alertController.addAction(cancelAction)

let OKAction = UIAlertAction(title: "OK", style: .Default) { action in
    // ...
}
alertController.addAction(OKAction)

self.presentViewController(alertController, animated: true) {
    // ...
}

示例代码来自 NSHipster.

用户应该只在您预计会失败的情况下收到警报;例如,由于没有互联网而无法通过的网络请求。您不必为每个可能的错误提醒用户;它通常足以记录它或只是退出范围。此外,您并不总是需要弹出警告框。以 DZNEmptySet 为例。