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_INSTRUCTION 或 EXC_BREAKPOINT(它们是低级 Mach 异常类型)。
这一直是初学者和经验丰富的开发人员的困惑之源。在 Xcode 9.1 中,致命错误的显示得到了显著改进。在调试器下运行时,Xcode 现在将在发生陷阱的编辑器中显示失败原因

许多触发运行时陷阱的事件都已涵盖,包括
- 强制解包
nil - 强制 try 表达式 (
try!) 产生错误 - 数组越界索引
- 先决条件失败
- 断言失败
fatalError调用
请注意,只有当应用程序的入口点是用 Swift 编写时(即带有 @UIApplicationMain/@NSApplicationMain 属性的应用程序委托),这种改进的体验才可用。
Xcode 9.1 可以从 developer.apple.com 下载(目前是预发布版本,正式版本将于今年晚些时候发布)。