Swift 中的断言

Den*_*eny 4 assert assertions swift

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

我知道@noreturn属性(由 Seven Oglesby很好地解释了),但我不明白,这些函数什么时候被评估,什么时候被忽略。

函数assert并且fatalError仅在调试模式下发生,我测试了这种行为,这是真的。但assertionFailure也会在发布配置中停止程序。在文档中保持:

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

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

and*_*n22 5

实际上,assert仅在调试模式下评估,但fatalError无论配置如何都会发生。这是故意的。

但是,assertionFailure无论配置如何,都会发生,尽管您引用了文档。据我所知,要么行为assertionFailure不正确,要么文档不正确。

  • 我在 Xcode 6.2 中尝试过这个,现在 `fatalError` 也适用于我的发布模式。 (2认同)