2016-10-14 4 views
2

AppleからのSwift Bookには、母音を使用するスイッチの例があります。配列、構文の内容を使用するスイフトスイッチケース?

質問。 母音のこのリストを持つ代わりに、この内容を含む配列を使用できますか?もしそうなら、これを行うための構文は何ですか?


〜アップルスウィフトブック〜から

次の例不可解なパズルフレーズを作成するために、小文字 文字列からすべての母音とスペースを削除:はい

let puzzleInput = "great minds think alike" 
var puzzleOutput = "" 
for character in puzzleInput.characters { 
    switch character { 
    case "a", "e", "i", "o", "u", " ": 
     continue 
    default: 
     puzzleOutput.append(character) 
    } 
} 
print(puzzleOutput) 
// Prints "grtmndsthnklk" 

答えて

5

を:

let puzzleInput = "great minds think alike" 
var puzzleOutput = "" 
let vowels: [Character] = ["a", "e", "i", "o", "u", " "] 

for character in puzzleInput.characters { 
    switch character { 
    case _ where vowels.contains(character): 
     continue 
    default: 
     puzzleOutput.append(character) 
    } 
} 

caseは、パターンマッチング演算子(~=)に依存しています。新しいオーバーロードを定義した場合、コードをさらに短くすることができます。

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

for character in puzzleInput.characters { 
    switch character { 
    case vowels: 
     continue 
    default: 
     puzzleOutput.append(character) 
    } 
} 
+0

以上およびそれ以上!ありがとうございました!これは非常にエレガントで強力です。私の無知を許してください。パターンマッチング演算子( '〜=')は何を意味しますか? – Confused

+0

@Confusedパターン(この場合、 'T'、' [T] ')と値(この場合は' T'型)の配列をとり、パターンがその値に一致します。 "一致する"とは、あなた次第であり、関数本体が決定するものです。 – Alexander

+0

もう一つの一般的な例は '〜='で範囲を調べるのに使われています。たとえば、オペレータの実装で定義された「一致」の定義に従って、パターン「0 ... 10」が値「5」に一致するため、「0 ... 10〜= 5」はtrueを返します。この演算子が存在するため、switch文で直接case 0〜5と言うことができます。 – Alexander

関連する問題