Xcode 9.1 改进了致命错误的显示

Swift 具有语言结构,允许您指定程序的预期。如果在运行时未满足这些预期,程序将终止。例如,索引到数组 隐式地表达了索引在界限内的预期

// Program will terminate if 'index' less than 0 or greater than 'array.count - 1'.
let element = array[index]

另一个常见的操作,在失败时会终止程序,是对可选值的强制解包

// Program will terminate if 'self.navigationController' is nil.
let nc = self.navigationController!

先决条件 是另一个例子

// Program will terminate if 'index' is less or equal to 0.
precondition(index > 0, "Index must be greater than zero.")

当预期不正确或代码中存在错误时,Swift 保证 程序会陷入陷阱。特别是在开发过程中,常见的情况是未满足某些先决条件,程序终止并且调试器将显示该情况。但是,在 Xcode 9.1 之前(目前以 beta 版提供),调试器将这些情况显示为任何其他类型的崩溃一样 —— 通常为 EXC_BAD_INSTRUCTIONEXC_BREAKPOINT(它们是低级 Mach 异常类型)。

这一直是初学者和经验丰富的开发人员的困惑之源。在 Xcode 9.1 中,致命错误的显示得到了显著改进。在调试器下运行时,Xcode 现在将在发生陷阱的编辑器中显示失败原因

Swift fatal error in Xcode 9.1

许多触发运行时陷阱的事件都已涵盖,包括

请注意,只有当应用程序的入口点是用 Swift 编写时(即带有 @UIApplicationMain/@NSApplicationMain 属性的应用程序委托),这种改进的体验才可用。

Xcode 9.1 可以从 developer.apple.com 下载(目前是预发布版本,正式版本将于今年晚些时候发布)。