我想创建一个代码来确定该字符是否是列表中的符号之一。
var symbols = ["+","-"]
func issymbol(last:String ) -> Bool{
return true
for i in 0...(symbols.count){
if last == symbols[i]{
return false
}
}
}
答案 0 :(得分:1)
return关键字后无代码执行。所以我更新您的代码试试这个
var symbols = ["+","-"]
func issymbol(last:String ) -> Bool{
for value in symbols {
if last == value {
return true
}
}
return false
}
答案 1 :(得分:1)
您需要在末尾添加return true
,它将执行从未遇到的if last == symbols[i]{
。因此,如下所示更新代码:
func issymbol(last:String) -> Bool{
for i in 0...(symbols.count){
if last == symbols[i]{
return false
}
}
return true
}
issymbol(last: "+") //false
或者您可以使用contains
属性:
func issymbol(last:String) -> Bool{
return !symbols.contains(last)
}
issymbol(last: "+") // false
issymbol(last: "1") // true
答案 2 :(得分:1)
这段代码有很多问题。
return true
行立即返回,因此将不执行检查(错误消息)。由于索引从0开始且最后一个索引为for i in 0...(symbols.count)
,因此symbols.count - 1
行将崩溃。或者,您可以编写for i in 0..<symbols.count
。
最好的语法是不要编写基于索引的循环:
for symbol in symbols { if last == symbol ...
false
而不是true
。Bool
。正确的代码是
let symbols = ["+","-"]
func issymbol(last: String) -> Bool {
for i in 0...symbols.count - 1 {
if last == symbols[i] {
return true
}
}
return false
}
但是可以将其减少为
func issymbol(last: String) -> Bool {
return symbols.contains(last)
}
答案 3 :(得分:1)
函数仅在到达return语句之前执行。 Xcode检测到该函数中的其余代码将不会执行,因为您的函数将始终在第一行之后返回。您可能意思是这样的:
var symbols = ["+","-"]
func issymbol(last:String ) -> Bool{
for i in 0...(symbols.count){
if last == symbols[i]{
return false
}
}
return true
}
由于return语句位于for循环之后,因此可以执行for循环。如果您传入的字符串在symbols数组中为 not ,则此函数将返回true。