#swift #swift-guard
#swift #swift-guard
Вопрос:
Я использую инструкцию nice guard из 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)
}
Моя проблема в том, что компилятор swift дважды жалуется на строку, содержащую мой оператор guard:
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
на a,
затем вторая ошибка исчезает, но первая все еще существует. - замена на
where
,, where
но тогда эта строка даже не может быть проанализирована - замена
count
в where наInt(s)
, но с теми же ошибками.
Как я должен изменить свой код, чтобы он компилировался? (Я имею в виду, что с хорошим одним оператором guard, конечно, у меня может быть несколько guard, или ifs, или switch, но из того, что я прочитал о операторе guard, я должен иметь чистую читаемую строку).
Комментарии:
1.
guard let count = Int(s), count >= 0 else
должна компилироваться с помощью Swift 3 / Xcode 8. Возможно, какой-то невидимый пробел или управляющий символ в исходном коде?2. о, хорошо, я очистил свой продукт в xcode после замены, и все ошибки исчезли. Спасибо!
Ответ №1:
Для решения этой проблемы я рекомендую вам использовать синтаксис model Swift в операторе guard, который заменяет 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
}
}