Swift断言生产应用程序中的行为

Sta*_*ash 15 xcode assert objective-c ios swift

我正在阅读Swift电子书中的Assertions部分,看起来断言与Objective-C对应物的工作方式非常相似.但是,在作为生产应用程序运行时,我可以在文档中找不到任何关于运行时行为的信息.Objective-C NSAssert承诺永远不会因断言失败而终止生产应用程序.Swift中的情况是一样的吗?

Fre*_*eer 14

基于Apple在其文档中使用的语言,我会说在生产环境中忽略断言.

如果您的代码在调试环境中运行时触发断言,例如在Xcode中构建和运行应用程序时,您可以确切地看到无效状态发生的位置,并在触发断言时查询应用程序的状态.断言还允许您提供有关断言性质的合适调试消息.

并在"注意"块中:

断言导致您的应用程序终止,并且不能替代以不可能出现无效条件的方式设计代码.然而,在无效的情况是可能出现的情况,一个断言,以确保这些条件突出和有效的方式开发过程中发现,您的应用程序发布之前.

  • 是的,我试过了; 如果使用任何优化开关编译代码,断言确实完全被忽略. (5认同)

Sul*_*han 10

debug和release之间的区别在于编译器参数之间的区别.最可能的答案是会有一些特殊的编译器设置(类似于-eaJava).

编辑
Swift编译器有一个名为的参数-assert-config

-assert-config指定assert_configuration替换.可能的值包括Debug,Release,Replacement.

Release,断言被忽略.不确定Debug和之间的区别Replacement.

在此输入图像描述

  • 这个答案不再有效.Swift中的断言(不是'fatalError`)也是基于优化级别的. (4认同)

onm*_*133 5

检查Optimization Level并确保它不是Onone用于发布配置。看我的笔记https://github.com/onmyway133/blog/issues/39