有些情况下你忘了设置一个值(所以它实际上是一个错误),并且使用强制解包运行程序会导致问题崩溃,这可以让你找到你忘记设置值的错误已经设定.
从关于避免强制展开的帖子开始,总是提出强行解包会导致程序崩溃,因此这是一件坏事.当一个问题确实存在错误时崩溃有什么问题呢?
请举例说明强行展开可能是坏事.
(我不是说强行打开适合所有事情.)
强制解包(我也将包括强制转换)只应当你作为程序员知道一个事实,即一个可选的永远不会是nil的事实,除非你的代码中有一个明确的错误在开发过程中(然后你希望它崩溃).
有许多例子表明这种类型的强制展开是合适的.例子包括:
>获取应用程序包中已知文件的路径(nil表示您在开发期间忘记定位文件).
>强制转换对UITableView dequeueReusableCell的调用(nil表示你的故事板中有错误).
>当您专门向Calendar询问该组件时,从DateComponents获取特定组件(nil表示您有拼写错误).
显然还有很多其他情况下强制解包是合适的,但你必须清楚地了解这些情况.
但是,有许多运行时决策导致您无法保证的选项,并且不应强制解包此类情况.
例子包括:
>处理任何用户输入.永远不要假设用户输入有效数据.永远不要假设值可以按预期转换.始终检查零结果.
>解析JSON结果.永远不要假设您获得的数据符合某种预期格式,即使该格式已明确记录并且似乎总是有效.事情随着时间而变化.优雅地处理这些意外数据,而不是仅仅假设一个值将始终存在于假定的数据类型中.
>处理任何可以抛出或返回可选结果的API.事情可能会出错.错误发生.永远不要以为你会得到有效答案.代码防守.
最后,开发人员具有适当的经验和理解选项如何工作,他们的意思,以及何时值可能或者实际上不是零的开发人员能够在适当的时候安全地使用强制解包.明智地使用它.
永远不要使用强制解包,因为Xcode建议让编译器满意.