Возврат функции Swift Bool никогда не будет выполнен - PullRequest
0 голосов
/ 05 марта 2019

Я хочу создать код, который может определить, является ли символ одним из символов в моем списке.

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

example

Ответы [ 4 ]

0 голосов
/ 05 марта 2019

Функции выполняются только до достижения оператора возврата.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 может выполняться.Эта функция вернет true, если строка, которую вы передаете, является , а не в массиве символов.

0 голосов
/ 05 марта 2019

Вам нужно добавить 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
0 голосов
/ 05 марта 2019

В этом коде много проблем.

  1. Строка return true немедленно возвращается, поэтому проверка не будет выполнена (сообщение об ошибке).
  2. Строка for i in 0...(symbols.count) потерпит крах, потому что индекс начинается с 0, а последний индекс - 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)
}
0 голосов
/ 05 марта 2019

Код не выполняется после ключевого слова return.поэтому я обновляю ваш код попробуйте это

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