无法将“字符串”类型的值转换为预期的参数类型“布尔”
Posted
技术标签:
【中文标题】无法将“字符串”类型的值转换为预期的参数类型“布尔”【英文标题】:Cannot convert value of type 'String' to expected argument type 'Bool' 【发布时间】:2017-10-15 18:34:29 【问题描述】:我正在尝试编写一个函数,如果字符串 str 以元音开头,它将返回 true。以下代码可以正常编译
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")
然后我收到错误“无法将类型“字符串”的值转换为预期的参数类型“布尔””
我一直在摆弄代码,但到目前为止没有运气,任何帮助将不胜感激。谢谢你。
【问题讨论】:
或if ["a", "e", "i"].contains(string[string.startIndex]) ...
见***.com/questions/32750139/…。
【参考方案1】:
Swift 无法推断出您尝试构建的逻辑。 Swift 的逻辑变成了这样:
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]))
【讨论】:
【参考方案2】:你应该这样写:
else if(str.characters[str.startIndex] == "a" || str.characters[str.startIndex] == "e" || str.characters[str.startIndex] == "i")
您收到错误,因为编译器尝试将“e”和“i”都转换为 Bool 类型。
【讨论】:
【参考方案3】:使用 if else 开关会更高效:
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
【讨论】:
【参考方案4】:当您执行"a" || "e" || "i"
时,您正在比较strings
。使用此代码:
if(str.characters[str.startIndex] == "a"
|| str.characters[str.startIndex] == "e"
|| str.characters[str.startIndex] == "i")
// Your Code...
【讨论】:
【参考方案5】:布尔 OR 运算符 ||
需要布尔表达式。
所以你必须写EXPR == "a" || EXPR == "e" || EXPR == "i"
,其中EXPR
是获取第一个字符的表达式。
但是有一个更简单的解决方案(代码是 Swift 4)
func beginsWithVowel(str: String) -> Bool
return "aeiou".contains(String(str.prefix(1)))
它也考虑空字符串的情况。
【讨论】:
以上是关于无法将“字符串”类型的值转换为预期的参数类型“布尔”的主要内容,如果未能解决你的问题,请参考以下文章