Swift的类型检测(type-checker)是编译时的一个性能瓶颈。

在Xcode 9中添加了一个编译器标识位-warn-long-expression-type-checking,可以对那些耗时长的类型检测操作给出警告。

我们可以在Build Settings->Swift Compiler - Custom Flags->Other Swift Flags中添加这个标识:-Xfrontend -warn-long-expression-type-checking=<limit>;其中<limit>是个阈值,以毫秒为单位,超出这个值的类型检测就给出警告。

编译的警告信息如下图所示。

获取警告信息之后,就可以根据需要去优化对应的操作。至于<limit>,可以凭经验设置,设置低了,可能会产生大量的警告信息。建议从高到低设置,先优化耗时高的。另外,建议只在DEBUG模式下开启。

另外,在Xcode 9之前可以使用-warn-long-function-bodies标识(Xcode 9仍然保留),这个是警告哪个方法的类型检测超过阈值。可以尝试一下。

参考

  1. Measuring Swift compile times in Xcode 9