我正在阅读 Swift 电子书中的断言部分,看起来断言的工作方式与 Objective-C 的对应部分非常相似。但是,在文档中我找不到任何有关作为生产应用程序运行时运行时行为的信息。 Objective-C 的
NSAssert
承诺永远不会因断言失败而终止生产应用程序。 Swift 中也是同样的情况吗?
根据苹果在其文档中使用的语言,我想说断言在生产环境中被忽略。
如果您的代码在调试中运行时触发断言 环境,例如当您在 Xcode 中构建并运行应用程序时,您可以 准确查看无效状态发生的位置并查询其状态 触发断言时您的应用程序。一个断言 还可以让您提供有关其性质的合适的调试消息 断言。
在“注释”块中:
断言会导致您的应用程序终止,并且不能替代 以不太可能出现无效条件的方式设计代码 出现。尽管如此,在条件无效的情况下 可能的话,断言是确保这种情况的有效方法 在开发过程中,在您之前,会突出显示并注意到条件 应用程序已发布。
-ea
)。
编辑
Swift 编译器有一个名为 -assert-config
-assert-config 指定assert_configuration 替换。可能的值为“调试”、“发布”、“替换”。在
Release
中,断言被忽略。不确定
Debug
和
Replacement
之间的区别。
,其中一个断言被忽略,一个没有,恐怕我刚刚在 iOS 17.5 / Xcode 15.4 上遇到了类似的问题。
因此,例如,如果您在生产中看到 EXC_BREAKPOINT
崩溃,并且
crash_info_entry_0
(至少在“Keys”下的 Firebase Crashlytics 中)包含您的
assertionFailure
消息,那么您并没有疯。