如果程序确实有错误,那么崩溃并没有什么问题......如果您无法解决崩溃问题
但正如@phillip-mills 在他的评论中所说:
...在不了解导致崩溃的原因的情况下使用强制展开的人询问
我们经常看到一些示例,人们出于某种意想不到的原因强制打开不存在的可选项,在这种情况下,尝试“优雅地”打开可选项是有意义的。
错误的强制展开示例
假设您有一个后端服务,它为您提供一些 JSON,您可以将其解析为模型对象并呈现在视图中。
假设您有一个像这样的模型:
struct Person {
let firstName: String?
let lastName: String?
}
在UITableView 中,您使用人员对象填充一些单元格。大致如下:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//dequeue your cell
//get your person element from some array
//populate
cell.firstNameLabel.text = person.firstName!
cell.lastNameLabel.text = person.lastName!
return cell
}
在某些时候,您可能最终会得到 Person 而没有 firstName (您可以说这是后端的问题等等等等,但是......它可能会发生: ) ) 如果您强制展开,您的应用程序将在不需要的地方崩溃。在这种情况下,你本可以优雅地展开
if let firstName = person.firstName {
cell.firstNameLabel.text = firstName
}
或者你可以使用 Nil Coalescing Operator
let firstName = person.firstName ?? ""
最后,正如@rmaddy 在他的回答中所说的那样
强制解包很糟糕,因为不能保证您的程序在执行时访问实际变量
您无法始终确定数据是否符合您的预期。
当你有可能只在你绝对确定你正在操作的数据是有效的情况下才进行一些操作时,也就是说,如果你已经安全地打开它......那就太愚蠢了不要使用该选项:)
希望对你有所帮助。