2016-10-27 1 views
0

私は自分のコードをx、y、zに置き換えました。 現時点では私のコードはこのように実行されますが、私はxをチェックするために多くの行を持っています。代わりに、代わりにステートメントが多すぎるコードを使用している場合、このコードを単純化する方法はありますか?

if x != y,z 

をこのようなものを使用して、この

if x != y && x != z 

を使用するので申し訳ありませんが、誰もが、私はそれをよりよく説明しているはずの方法があります。ここでは、非常に有益だったを含む更新されたコードの一部ですありがとう!

if contactCreation.checkAllowed(newContact.contactDetails){ 
    if{contactCreation.blockedCreation.contains(newContact.contactDetails){ 
     watchList.addAttempt(newContact.contactDetails) 
    } 
}else{ 
    newAccount.showReasons() 
} 

は、私は私の質問が多かったxがyであるかどうかを確認する方法はありかつXがZである場合は、xがy + zはない場合は推測します。基本的に私は電話したがっていました

if x != y && x != z && x != d && != e 

1つのif文で毎回xを得る必要はありません。 このようなもの

if x != y && != z && != d && != e 

ありがとうございました!

+0

あなたは私に最良のソリューションを考えることができるようにいくつかのコンテキストを教えてもらえますか? – Alexander

答えて

1

わずかに短いバージョンでは、パターン・マッチング演算子(~=)に過負荷を追加することです:

infix operator !!= : ComparisonPrecedence 

func !!=<T: Equatable>(lhs: T, rhs: [T]) -> Bool { 
    return !rhs.contains(lhs) 
} 

if x !!= [y,z] { 

} 
:その表現は少し扱いに​​くくなりますし、あなたはそれをたくさん書く場合

func ~=<T: Equatable>(pattern: [T], value: T) -> Bool { 
    return pattern.contains(value) 
} 

if !([y,z] ~= x) { 

} 

は、独自の演算子を定義することができます

+0

ありがとうございました!これは素晴らしいです。うん、私は私の質問を何を検索するか分からなかった。素晴らしい答えをありがとう! –

+0

これは私がこれについてもっと学ぶことができる任意のチュートリアルを提案することがたくさんありがとう、すばらしいですか? –

+0

[Basic Operators](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID60)から始めることができます。と[アドバンストオペレータ](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AdvancedOperators.html#//apple_ref/doc/uid/TP40014097-CH27-ID28)のスウィフト帳 –

0

あなたはこのように、配列の集約とcontains方法を使用して、この状態を書き換えることができます。

if ![y, z].contains(x) { 
    ... 
} 

xは単純な変数であるとき、これはあまり役に立ちませんが、それはxがあるとき、あなたには、いくつかのコードの重複を削除することができます複雑な表現。

+1

実際、元のコードと一致するように条件を否定してはいけませんか? – rmaddy

+0

これは大変ありがとうございます。xは私の場合、単純な変数ではありません。私はifステートメントを通過しています。 –

0

私はあなたのコードを示したものでこれを示唆していますが、あなたはタプルを使用することができます。

let testCase:(String,String) = ("hello","world") 
if x != testCase { 
    x = ("did not", "match") 
} 
+0

ありがとう、私はこれらの文字列のいずれかが真であった場合、 はxがfalseに戻っていないでしょうか? –

関連する問題