7

有没有办法(通过编译器标志或脚本)检测跨 Swift 项目的强制展开?

我正在考虑这样的事情:

let b = a as! B
let c = a!
a!.method()

例如,不会触发误报var a: A!

4

1 回答 1

1

如评论中所述,可以精心设计正则表达式搜索以捕获 postfix 的大多数用途!。(如果你小心点,你应该可以让它忽略冒号类型名爆炸的大多数用法,这样你就不会从 IUO 类型声明中得到噪音。)

不过,这已经差不多了,而且它是不完整的——例如,任何时候你调用一个返回 IUO 类型的 API 并在没有检查可选的情况下访问它的结果时,你可能会在没有明确地有任何刘海在你的代码。

任何试图持续警告未检查展开的工具都需要对 Swift 的类型系统、语法和类型推断规则有相当深入的了解。实际上,您可以拥有此类知识(并且正确拥有)的唯一地方是编译器内部。因此,您最好向 Apple 提交功能请求或使用开源项目

于 2015-12-13T00:48:11.780 回答