precondition(condition: Bool, message: String)
和assert(condition: Bool, message: String)
Swift 之间有什么区别?
他们俩在我看来都一样。在哪种情况下,我们应该使用另一种?
assert
用于测试期间的健全性检查,而precondition
用于防范可能发生的事情(如果发生),这意味着您的程序无法合理地进行。
因此,例如,您可以assert
对具有合理结果的计算(例如在一定范围内)进行计算,以快速发现是否有错误。但是,您不希望随此附带它,因为超出范围的结果
可能 是有效的,并且不是至关重要的,因此不应崩溃您的应用程序(假设您只是使用它在进度栏中显示进度)。
另一方面,在获取元素时检查数组下标是否有效是a precondition
。当请求无效的下标时,数组对象没有合理的下一步操作,因为它 必须
返回一个非可选值。
来自文档的全文(请尝试单击assert
并precondition
在Xcode中单击):
前提
检查取得进步的必要条件。
使用此功能可以检测到即使在运输代码中也必须阻止程序继续运行的情况。
在运动场和-
Onone构建中(Xcode的Debug配置的默认设置):如果condition
评估为false,则在打印后以可调试状态停止程序执行message
。在-O构建中(Xcode的Release配置的默认设置):如果
condition
评估为false,则停止程序执行。在-Ounchecked的版本中,
condition
不会进行评估,但是优化程序可能会假设 它将 评估为true
。未能满足-
Ounchecked构建中的假设是严重的编程错误。
断言
传统的C样式断言带有可选消息。
使用此功能可进行内部完整性检查,这些检查在测试期间处于活动状态,但不会影响运输代码的性能。检查发行版本中的无效用法;见
precondition
。
本文向大家介绍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
问题内容: 在报表汇总中,我构建了一些表。后来我根本不需要它们了。有人提到要截断它们,因为这样会更快。 问题答案: 从表中删除记录会记录每次删除,并为删除的记录执行删除触发器。截断是一种更强大的命令,可清空表而不记录每一行。由于需要检查每一行上的外键,因此SQL Server阻止您使用带有引用该表的外键的表来对其进行截断。 截断通常是超快的,非常适合清除临时表中的数据。它的确保留了表的结构以备将来