2015-02-08 68 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