2016-12-01 4 views
3

私はしばしばスウィフトコード内の状況、次のようなものが発生します。「x == AまたはBまたはCならば」とスウィフトでできるだけ簡潔に言うにはどうすればよいですか?

if x == A || x == B{ 

    //do something 
} 

はそれを短縮する方法はありますか?

+5

何が問題なのですか? – hammus

+2

代用スイッチケースを使用する –

+0

A、B、またはCのデータタイプは何ですか?より良い方法があるかどうかを判断するのを助けることができます – Fonix

答えて

8

私は、同じタイプのすべての値ならば、代わりにこの

switch x { 
    case A, B, C: 
     // do stuff 
    case D: 
     // other stuff 
    default: 
     // do default stuff 
} 
2

使用アレイのような場合のためにswitch文が好き。あなたがチェックしたいのは、xが任意の値にマッチしているかどうかだけです。例えば

let x = 10 
let A = 20 
let B = 40 
let C = 40 


let myArray = [A, B,C] 


if myArray.contains(x) { 
    // do something 
} 
+0

コレクションの検索項目に関して、「セット」がより高速になります。 'Array(配列)'は 'O(n)'で、 'Set'は平均で' O(log(n)) 'の近くにあります。 – user28434

+1

@ user28434この数少ない要素のために、ハッシングのオーバーヘッドは、直線検索よりも** way **遅くなります。 – Alexander

+0

@AlexanderMomchliov、確かに、著者は本当に3つの要素を比較する必要がある場合。 – user28434

-1
if (x^A) * (x^B) * (x^C) == 0 { 
    //do what you need 
} 

短いですか?わかりません...もっと印象的ですか?絶対に。

+0

'|'は '*'より速い – Alexander

+1

'x'、' A'、 'B'、' C'が 'BitwiseOperations'プロトコル('^'と' | 'が使われている場合) '*'の場合は、追加のプロトコル準拠が必要です。そしてそれを '0'と比較するには、左オペランドが' x'の型で '=='を定義し、右は 'Int'を定義する必要があります。その解決法は本当に小さな型のサブセットでしか動作しないか、 'x'が何らかの' Int'のようなものであれば、そうでないかもしれません。 – user28434

+0

また、 '||'演算子のように短絡しません。 –

関連する問題