2016-04-27 10 views
0

anArray.contains(nil)のようなものはうまくいくと思っていましたが、そうではありません。Swiftコレクションタイプでnilをチェックする最良の方法

extension Array { 
    func containsNil() -> Bool { 
     return self.filter({ $0 == nil }).count > 0 
    } 
} 

その他の思考:

私ができる最善のは、このような拡張機能を作成するのですか?

+0

「nil」が含まれているとしたらどうしますか? – Eendje

+1

あなたのユースケースは何ですか?オプションを含むことができる配列だけが 'nil'を含むことができます。 'nil'値から保護したいですか?もしそうなら、配列を平坦化するだけです: 'let vals:[Int?] = [1,2,3、nil]; let flat = vals.flatMap {$ 0} as [Int?]; ' – JAL

+3

これはユースケースを尋ねる2つのコメントがある理由は、これがほぼ確実に[XY問題](http:// meta。 stackexchange.com/q/66377/244435)。 – nhgrif

答えて

1

あなたは、nil要素の数をカウントするには、常にすべての要素を調べなければなりません。また、カウントが0より大きい場合は戻ります。必要以上に多くの情報を収集しています。あなたは無数の要素の数を使用していないようです。配列内にnilがある場合は気にするだけです。

代わりに、単純に配列全体を反復することができ、初めてnilが見つかるとtrueを返します。

+0

はい、私は認識していますが、それ以上のコード行が必要です。私はそれを避けたかった。 – BridgeTheGap

+4

本当に短くしたいならば、 '.contains {$ 0 == nil}'とするだけです。しかし、あなたの質問のコメントを最初にチェックしてください。 nhgrifが述べたように、おそらくXY問題です。 – Eendje

関連する問題