gpt4 book ai didi

swift - 为什么要避免强制展开

转载 作者:搜寻专家 更新时间:2023-10-30 22:24:56 25 4
gpt4 key购买 nike

有些情况下你忘记设置一个值(所以它实际上是一个错误),并且使用强制解包运行程序可能会导致问题崩溃,这可以让你追踪你忘记设置值的错误你应该设置的。

从谈论避免强制解包的帖子中,总是提出强制解包会导致程序崩溃,因此这是一件坏事。当问题实际上存在错误时崩溃有什么不好?

请举例说明强制解包的坏处。

(我并不是说强制展开适用于所有情况。)

最佳答案

强制解包(我也将包括强制转换)只应该在你作为程序员知道一个事实永远不会是 nil 的情况下使用除非 nil 代表开发期间代码中的明显错误(然后您希望它崩溃)。

有很多例子表明这种类型的强制解包是合适的。示例包括:

  • 获取应用程序包中已知文件的路径(nil 表示您在开发期间忘记定位该文件)。
  • 强制调用 UITableView dequeueReusableCell(nil 表示您的 Storyboard中有错误)。
  • 从 DateComponents 中获取一个特定的组件,当您专门向 Calendar 询问该组件时(nil 意味着您有错字)。

显然还有许多其他情况适合强制解包,但您必须清楚地了解这些情况。

但是有很多运行时决策会导致您无法保证的可选值,因此不应强制展开此类情况。

示例包括:

  • 处理任何用户输入。永远不要假设用户输入有效数据。永远不要假设一个值可以按预期进行转换。始终检查 nil 结果。
  • 解析 JSON 结果。永远不要假设您获得的数据符合某种预期格式,即使该格式已明确记录并且似乎总是有效。事情会随着时间而改变。优雅地处理此类意外数据,而不是仅仅假设一个值将始终存在并且具有假定的数据类型。
  • 处理任何可以throw 或返回可选结果的 API。事情可能会出错。错误发生。永远不要假设你会得到一个有效的答案。防御性编码。

最后,具有适当经验并了解可选值的工作原理、它们的含义以及值何时可能为或可能不会为 nil 的开发人员能够安全地使用在适当的时候强制展开。明智地使用它。

永远不要仅仅因为 Xcode 建议它让编译器满意而使用强制解包。

关于swift - 为什么要避免强制展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46715568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com