Условие после привязки переменной в проблеме компиляции Guard Swift

Я использую хороший защитный оператор из Swift 3.0 (в Xcode 8.0) и имею следующую функцию:

func parse(suffix s: String) throws -> Instruction {
    guard let count = Int(s) where count >= 0 else {
      throw InstructionParsingError(message: s + " should be a positive integer")
    }
    return CallInstruction(argCount: count)
}

Моя проблема в том, что быстрый компилятор дважды жалуется на строку, содержащую мое защитное утверждение:

CallInstruction.swift:42:29: Boolean condition requires 'where' to separate it from variable binding
CallInstruction.swift:42:30: Expected ',' joining parts of a multi-clause condition

Я старался

  • заменяя where с , тогда вторая ошибка исчезает, но первая все еще там.
  • заменяя where с , where но тогда эту строку даже не разобрать
  • заменяя count в где Int(s) но есть такие же ошибки.

Как мне изменить мой код, чтобы он компилировался? (Имея в виду одно единственное защитное утверждение, я имею в виду, конечно, что у меня может быть несколько охранников, если они или переключаются, но из того, что я прочитал об защитном заявлении, у меня должна быть четкая читаемая строка).

1 ответ

Для решения этой проблемы я рекомендую использовать синтаксис модели Swift в выражении охранника, которое заменяет where с ,,

func  parse(suffix s: String) {
    guard let count = Int(s), count >= 0 else {
         return
    }
}

Также можно использовать if let заявление:

func  parseTwo(suffix s: String) {
    if let count = Int(s), count >= 0  {
        // done
        print(count)
    } else {
        return
    }
}
Другие вопросы по тегам