警卫失败时该怎么办

时间:2017-01-25 01:30:55

标签: ios swift error-handling type-safety

我的问题基本上是,当警卫失败时,有什么正常的事情要做?我主要在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
}

通常,我记录失败并返回,或者如果值存在至关重要,我会fatalError退出该方法。这似乎是错误的方法吗?是否有某种方法可以回归到更好的案例并仍然执行用户要求的内容?我喜欢安全展开价值观,即使我需要他们在那里,因为力量展开让我感到肮脏,并且我没有正确地做某事。这是我应该做的事情还是在这些情况下强制解包?

您处理可选值的方法有哪些?我真的只是在寻找其他人处理它的意见和建议。

谢谢!

2 个答案:

答案 0 :(得分:2)

只应提醒用户您希望失败的事情;例如,由于他们没有互联网而无法通过的网络请求。您不必警告用户每一个可能的错误;它通常足以记录它或只是退出范围。此外,您不必总是弹出一个警告框。请参阅DZNEmptySet作为示例。

答案 1 :(得分:1)

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