2017-10-15 24 views
0

String strが母音で始まる場合にtrueを返す関数を記述しようとしています。次のコードはコンパイルされます罰金'String'型の値を 'Bool'型の予想される引数型に変換できません

func beginsWithVowel(str: String) -> Bool { 
    if(str.characters.count == 0){ 
     return false 
    } else if(str.characters[str.startIndex] == "a"){ 
     return true 
    } 
    return false 
} 
beginsWithVowel(str: "apple") 

私は複数の文字に最初の文字を比較するとき、問題は、例えば、

その後、
else if(str.characters[str.startIndex] == "a" || "e" || "i") 

私はエラー「型の値を変換できません」を取得文字列 'を予想される引数型' Bool 'に設定

私はコードを操作していましたが、これまで何の助けもありませんでした。ありがとうございました。

+0

if ["a"、 "e"、 "i"]。contains(string [string.startIndex]){...} ' – Rob

+0

https://stackoverflow.com/questions/32750139/howを参照してください。 1つの値と複数の値の比較を迅速に比較することができます。 –

答えて

3

スイフトは、あなたがしようとしているロジックを推論することはできません。

if(str.characters[str.startIndex] == "a" || "e" || "i")

if(<Boolean expression> || "e" || "i")

に相当し、代替ソリューションをすることができif(<Boolean expression> || <String expression> || String expression)

と同等です:

代わり

if(["a", "b", "c"].contains(str.characters[str.startIndex])){

1

あなたはこのようにそれを記述する必要があります。

else if(str.characters[str.startIndex] == "a" || str.characters[str.startIndex] == "e" || str.characters[str.startIndex] == "i") 

コンパイラは「E」と「i」はブール値を入力するための両方を変換しようとするので、あなたは、エラーが発生します。

0

スウィフトへのロジックはこのようなものになりもしそうなら、スイッチはmorになるでしょう効率的な電子:あなたは"a" || "e" || "i"を実行すると

func beginsWithVowel(str: String) -> Bool { 

    guard str.characters.count > 0 else { 
     return false 
    } 

    switch str.characters[str.startIndex]{ 
    case "a","e","i","o","u": return true 
    default: return false 
    } 
} 
0

あなたはstrings間で比較しています。このコードを使用します。ブール式を期待||

if(str.characters[str.startIndex] == "a" 
    || str.characters[str.startIndex] == "e" 
    || str.characters[str.startIndex] == "i") { 

    // Your Code... 

} 
0

ブールOR演算子。

したがって、EXPR == "a" || EXPR == "e" || EXPR == "i"と書く必要があります。ここで、EXPRは最初の文字を取得する式です。

しかしこれは、空の文字列の場合も考慮する(コードがスイフト4)

func beginsWithVowel(str: String) -> Bool { 
    return "aeiou".contains(String(str.prefix(1))) 
} 

容易溶液があります。

関連する問題