2015-12-12 5 views
5

Swiftプロジェクト全体で強制アンラップを検出する方法はありますか(コンパイラフラグまたはスクリプト経由)ですか?Swiftプロジェクトで強制アンラッピングを検出する方法はありますか?

私はこれらのようなものを考えている:例えばvar a: A!のために偽陽性をトリガすることなく

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

+0

"[^ \ 1]![[s \ p {P}]"を検索すると、暗黙的にアンラップされたオプションを含むそのようなインスタンスを見つけることができます(通常はアンラッピングと同じくらい悪いです) Boolなどの場合私はこれを[ここ](https://www.reddit.com/r/swift/comments/3a3k65/quick_tip_for_every_swift_programmer/)に掲載しました。これがあなたの質問に答えるかどうか教えてください。私はこれを回答として掲示します – Kametrixom

+0

力を使うアンラップ演算子、強制キャスト演算子( 'as!')、または無視するエラー文( 'try!')は、無条件に、普遍的に悪いことではありません。同様に、 'ImplicitlyUnwrappedOptional 'タイプの使用 - これらはすべて、安全に、注意深く考慮して、またはバグを導入するような方法で無意識に使用できるコンストラクトです。私は、前者の3つは、IUOタイプの使用よりも不注意なコーディングの可能性が高いことを認めています。特に、IBアウトレットのようなユースケースではIUOが必要です。 – rickster

答えて

1

コメントに記載されているように、正規表現の検索は、ほとんどのポストフィックスの使用を捕まえることができます!。 (そして注意するならば、IUO型宣言からノイズが出ないように、大文字のtypename-bangの大部分の使用を無視するようにする必要があります)

これは、しかし、それは不完全です。たとえば、IUO型を返し、オプションをチェックせずにその結果にアクセスするAPIを呼び出すと、明示的にコード内にバングを持たせることなく強制解除を行うことができます。

未チェックのアンラップについて一貫して警告しようとするツールであれば、Swiftのタイプシステム、文法、タイプ推論ルールについて深く知る必要があります。そして、実際にあなたがそのような知識を持つことができ(そして正しくそれを持つことができる)唯一の場所は、コンパイラの中にあります。したがって、おそらくfiling a feature request to Appleをオフにするか、またはopen source projectで作業するのが最適です。

関連する問題