Swift precondition(condition: Bool, message: String)
和assert(condition: Bool, message: String)
Swift有什么区别?
他们两个看起来都一样.我们应该在哪种情况下使用其中一种?
Air*_*ity 114
assert
是为了在测试过程中进行健全性检查,而是precondition
用于防止事情发生,如果它们发生,则意味着您的程序无法合理地进行.
因此,举例来说,你可能会assert
在某些计算中得到明智的结果(比如在某些范围内),以便快速找到你是否有错误.但是你不想附带这个,因为越界结果可能是有效的,并且不重要所以不应该崩溃你的应用程序(假设你只是用它来显示进度条中的进度).
另一方面,在获取元素时检查数组上的下标是否有效precondition
.当要求输出无效的下标时,数组对象没有合理的下一个操作,因为它必须返回非可选值.
来自文档的全文(尝试选项单击assert
并precondition
在Xcode中):
前提
检查前进的必要条件.
使用此功能可以检测必须阻止程序在运输代码中继续运行的条件.
在playgrounds和-Onone构建中(Xcode的Debug配置的默认值):如果
condition
计算结果为false,则在打印后停止以可调试状态执行程序message
.在-O构建中(Xcode的Release配置的默认值):如果
condition
求值为false,则停止程序执行.在-Ounchecked构建中,
condition
不会对其进行评估,但优化程序可能会认为它会评估为true
.未能在-Ounchecked构建中满足该假设是一个严重的编程错误.
断言
传统的C风格断言带有可选消息.
使用此功能进行内部健全性检查,这些检查在测试期间处于活动状态,但不会影响运输代码的性能.检查发布版本中的无效用法; 看
precondition
.
在playgrounds和-Onone构建中(Xcode的Debug配置的默认值):如果
condition
计算结果为false,则在打印后停止以可调试状态执行程序message
.在-O构建(Xcode的Release配置的默认值)中,
condition
不进行评估,并且没有任何影响.在-Ounchecked构建中,
condition
不会对其进行评估,但优化程序可能会认为它会评估为true
.未能在-Ounchecked构建中满足该假设是一个严重的编程错误.
onm*_*133 75
我发现Swift断言 - 缺少有用的手册
debug release release
function -Onone -O -Ounchecked
assert() YES NO NO
assertionFailure() YES NO NO**
precondition() YES YES NO
preconditionFailure() YES YES YES**
fatalError()* YES YES YES
Run Code Online (Sandbox Code Playgroud)
- 断言:检查自己的代码是否存在内部错误
- 前提条件:检查您的客户是否给了您有效的参数.
此外,您需要注意使用的内容,请参阅assertionFailure和Optimization Level
Gre*_*reg 10
该precondition
所以当您运送您的应用程序是在发布模式活跃的前提失败的应用程序将终止.
Assert
默认情况下仅在调试模式下工作.
我在NSHipster上使用它时发现了这个很好的解释:
断言是从经典逻辑中借鉴的概念.在逻辑中,断言是关于证明中的命题的陈述.在编程中,断言表示程序员在声明它们的地方对应用程序做出的假设.
当在前提条件和后置条件的容量中使用时,它描述了在方法或函数的执行开始和结束时对代码状态的期望,断言形成契约.断言还可用于在运行时强制执行条件,以防止在某些先决条件失败时执行.
前提
func precondition(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
Run Code Online (Sandbox Code Playgroud)
检查前进的必要条件.
断言
func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
Run Code Online (Sandbox Code Playgroud)
传统的C风格断言带有可选消息.
使用此功能进行内部健全性检查,这些检查在测试期间处于活动状态,但不会影响运输代码的性能.检查发布版本中的无效用法; 看前提条件.
在playgrounds和-Onone构建中(Xcode的Debug配置的默认值):如果condition的计算结果为false,则在打印消息后停止程序在可调试状态下执行.