2015-02-08 32 views
4

我在Swift中测试了断言,但我有点困惑。你能否向我解释一下assert,assertionFailurefatalError函数之间的区别?Swift中的断言

我知道@noreturn属性(nicely explained由Seven奥格尔斯比),但我不明白,什么时候评估这些函数,什么时候它们被忽略。

函数assertfatalError仅在调试模式下出现,我测试了这种行为,它是真的。但是assertionFailure也会在发布配置中停止程序。在文档中:

发生致命错误,程序执行应在调试模式下停止。在优化版本中,这是一个noop。

然后我不明白,为什么不评估这种方法在非调试模式下被忽略。有没有人有任何经验呢?

回答

4

实际上,assert仅在调试模式下评估,但fatalError与配置无关。这是故意的。

但是,不管配置如何,assertionFailure也会发生,尽管您引用了文档。据我所知,assertionFailure的行为不正确,或者文档不正确。

+0

对我来说'fatalError'只在调试模式下才会发生。 – Deny 2015-02-11 22:30:19

+0

这更奇怪,因为对于我来说'fatalError'绝对可以在发布模式下工作。 – andyvn22 2015-02-11 23:45:32

+1

我在Xcode 6.2中试过这个,现在'fatalError'也在我的发布模式下工作。 – Deny 2015-03-15 11:37:28