Swift Bool函数返回将永远不会执行

时间:2019-03-05 05:37:42

标签: swift boolean

我想创建一个代码来确定该字符是否是列表中的符号之一。

var symbols = ["+","-"]
func issymbol(last:String ) -> Bool{
    return true
    for i in 0...(symbols.count){
    if last == symbols[i]{
       return false
    }
    }
}

example

4 个答案:

答案 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)

这段代码有很多问题。

  1. return true行立即返回,因此将不执行检查(错误消息)。
  2. 由于索引从0开始且最后一个索引为for i in 0...(symbols.count),因此symbols.count - 1行将崩溃。或者,您可以编写for i in 0..<symbols.count。 最好的语法是不要编写基于索引的循环:

    for symbol in symbols { if last == symbol ...
    
  3. 如果找到该项目,则代码返回false而不是true
  4. 如果找不到该项目,则代码不会在循环后的 之后返回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。