有没有办法(通过编译器标志或脚本)检测跨 Swift 项目的强制展开?
我正在考虑这样的事情:
let b = a as! B
let c = a!
a!.method()
例如,不会触发误报var a: A!
。
有没有办法(通过编译器标志或脚本)检测跨 Swift 项目的强制展开?
我正在考虑这样的事情:
let b = a as! B
let c = a!
a!.method()
例如,不会触发误报var a: A!
。
如评论中所述,可以精心设计正则表达式搜索以捕获 postfix 的大多数用途!
。(如果你小心点,你应该可以让它忽略冒号类型名爆炸的大多数用法,这样你就不会从 IUO 类型声明中得到噪音。)
不过,这已经差不多了,而且它是不完整的——例如,任何时候你调用一个返回 IUO 类型的 API 并在没有检查可选的情况下访问它的结果时,你可能会在没有明确地有任何刘海在你的代码。
任何试图持续警告未检查展开的工具都需要对 Swift 的类型系统、语法和类型推断规则有相当深入的了解。实际上,您可以拥有此类知识(并且正确拥有)的唯一地方是编译器内部。因此,您最好向 Apple 提交功能请求或使用开源项目。