我用迅捷的语言测试了断言,但有点困惑。你能给我解释一下assert
、assertionFailure
和fatalError
函数之间的区别吗?
我知道@noreturn
属性(nicely explainedby seven oglesby),但我不理解,这些函数什么时候评估,什么时候被忽略。
函数assert
和fatalError
只在调试模式下发生,我测试了这种行为,它是正确的。但是assertionFailure
也会停止版本配置中的程序。文件保留:
发生致命错误,程序应在调试模式下停止执行。在优化的构建中,这是一个noop。
那么我不明白,为什么不忽略非调试模式下对该方法的评估呢?有没有人有这方面的经验?
最佳答案
实际上,assert
只在调试模式下进行计算,但无论配置如何,fatalError
都会发生。这是故意的。
然而,assertionFailure
也会发生,不管配置如何,尽管您引用了文档。据我所知,assertionFailure
的行为不正确,或者文档不正确。