2016-04-26 4 views
2

は現在、私はチェックしています:スウィフトどのように私は、複数の文字列の条件のための変数を確認することができ

if dict["eventCode"] == "OFF" || dict["eventCode"] == "DHD" || dict["eventCode"] == "SBY" 
    { 
    // do something 
    } 
else if dict["eventCode"] == "DHT" || dict["eventCode"] == "SLV" || dict["eventCode"] == "CLV" 
{ 
    // do something else 
} 

可能な値のリストは、if文、約10あります長く働いており、エラーをタイプする傾向があります。

このような「if文」を屈折させる最良の方法は何ですか?

答えて

3

switch

guard let val = dict["eventCode"] as? String else { return } 

switch val { 
case "OFF", "DHD", "SBY": 
    print("something") 

case "DHT", "SLV", "CLV": 
    print("something else") 

default: 
    print("default") 
} 
2
let check1 = ["OFF", "DHD", "SBY"] 
let check2 = ["DHT", "SLV", "CLV"] 

if check1.contains(dict["eventCode"] ?? "") { 
    print("found in 1") 
} else if check2.contains(dict["eventCode"] ?? "") { 
    print("found in 2") 
} 

しかし、私の意見では、これは醜い..

1

私は通常switchのステートメントを使用します。それは必ずしもif-else枝のシリーズより少ないコードではありませんが

switch dict["eventCode"] { 
    case let ec? where ec == "OFF" || ec == "DHD" || ec == "SBY": 
     // do something 
    case let ec? where ec == "DHT" || ec == "SLV" || ec == "CLV": 
     // do something else 
    default: 
     break 
} 

を、I論理的なクリーナーを見つけやすく、読みやすい。

EDIT:Eendjeの答え@

も非常に良いです、そしてswitchと組み合わせることができる:文字列の

let check1 = ["OFF", "DHD", "SBY"] 
let check2 = ["DHT", "SLV", "CLV"] 

switch dict["eventCode"] { 
    case let ec? where check1.contains(ec): 
     // do something 
    case let ec? where check2.contains(ec): 
     // do something else 
    default: 
     break 
} 
関連する問題