当前位置: 首页 > 面试题库 >

快速“前提”和“断言”之间的区别?

柯良骏
2023-03-14
问题内容

precondition(condition: Bool, message: String)assert(condition: Bool, message: String)Swift 之间有什么区别?

他们俩在我看来都一样。在哪种情况下,我们应该使用另一种?


问题答案:

assert用于测试期间的健全性检查,而precondition用于防范可能发生的事情(如果发生),这意味着您的程序无法合理地进行。

因此,例如,您可以assert对具有合理结果的计算(例如在一定范围内)进行计算,以快速发现是否有错误。但是,您不希望随此附带它,因为超出范围的结果
可能 是有效的,并且不是至关重要的,因此不应崩溃您的应用程序(假设您只是使用它在进度栏中显示进度)。

另一方面,在获取元素时检查数组下标是否有效是a precondition。当请求无效的下标时,数组对象没有合理的下一步操作,因为它 必须
返回一个非可选值。

来自文档的全文(请尝试单击assertprecondition在Xcode中单击):

前提

检查取得进步的必要条件。

使用此功能可以检测到即使在运输代码中也必须阻止程序继续运行的情况。

  • 在运动场和-
    Onone构建中(Xcode的Debug配置的默认设置):如果condition评估为false,则在打印后以可调试状态停止程序执行message

  • 在-O构建中(Xcode的Release配置的默认设置):如果condition评估为false,则停止程序执行。

  • 在-Ounchecked的版本中,condition不会进行评估,但是优化程序可能会假设 它将 评估为true。未能满足-
    Ounchecked构建中的假设是严重的编程错误。

断言

传统的C样式断言带有可选消息。

使用此功能可进行内部完整性检查,这些检查在测试期间处于活动状态,但不会影响运输代码的性能。检查发行版本中的无效用法;见precondition

  • 在运动场和-
    Onone构建中(Xcode的Debug配置的默认设置):如果condition评估为false,则在打印后以可调试状态停止程序执行message

  • 在-O构建中(Xcode的Release配置的默认设置), condition不进行评估,也没有任何影响。

  • 在-Ounchecked的版本中,condition不会进行评估,但是优化程序可能会假设 它将 评估为true。未能满足-
    Ounchecked构建中的假设是严重的编程错误。



 类似资料:
  • 本文向大家介绍Java中故障快速和故障安全之间的区别,包括了Java中故障快速和故障安全之间的区别的使用技巧和注意事项,需要的朋友参考一下 序号 键 不及格 故障安全 1 例外 集合中的任何更改(例如在线程期间添加,删除和更新集合)都是迭代集合,然后使快速抛出并发修改异常失败。  故障安全集合不会引发异常。  2。 集合类型 ArrayList和hashmap集合是快速失败迭代器的示例  Copy

  • 本文向大家介绍Java和C语言之间的区别,包括了Java和C语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 Java和C都是编程世界中最流行的编程语言,由于它们的各种重要特征和特性,这两种语言都在全球范围内被广泛使用。 根据它们的功能,以下是Java和C之间的重要区别 序号 键 爪哇 C 1 介绍了 Java是在引入年份之后以C语言开发的,它是由James Gosling在1995年开发的

  • 问题内容: 我需要在某个地方修复一些CSS,因为我的文字没有回绕,而如果这是一个非常长的单词,它将无限期地继续下去。 像大多数情况一样,我在CSS文件中尝试了一下,但没有成功。 然后,令我惊讶的是,在Google Chrome开发者工具的建议下,我尝试并解决了我的问题。我对此感到震惊,因此我一直想知道这两者之间的区别,但是在这个主题上我什么也没看到。 此外,我不认为W3没有提及它是有记录的行为。我

  • 本文向大家介绍高级语言和低级语言之间的区别,包括了高级语言和低级语言之间的区别的使用技巧和注意事项,需要的朋友参考一下 让我们首先了解高级和低级语言- 高级语言 与低级语言相比,它易于解释和编译。 它可以被认为是程序员友好的语言。 很容易理解。 这很容易调试。 在维护方面很简单。 它要求将编译器/解释器翻译成机器代码。 它可以在不同的平台上运行。 它可以从一个位置移植到另一位置。 i.e与低级语言

  • 问题内容: 查看下面的示例代码 和 当我问到代码差异时,我并不是在说执行流程,这是显而易见的。 那么这些代码之间的 真正 区别是什么?建议何时 在 通话 前 使用您的代码,何时 在 通话 后 使用您的代码?我想在某些情况下这很重要。 问题答案: 您不应在之前放置任何代码,因为此方法可以使系统执行正确暂停应用程序所需的操作。您要在回调中执行的所有代码都应放在调用之后。希望这可以帮助。 活动报价: 注

  • 问题内容: / 和之间的确切区别是什么?有人可以告诉我打破长链接的更好的方法吗?大多数人说您应该将断字与结合使用,但看起来不太合逻辑。我认为结合使用以获得更好的跨浏览器支持是最好的方法。你怎么看? 问题答案: 从源报价 自动换行:自动换行CSS属性用于指定浏览器是否可以在单词内换行,以防止在其他情况下坚不可摧的字符串太长而无法容纳其包含框时溢出。 overflow-wrap:属性已在CSS3 Te