Условие после привязки переменной в проблеме компиляции 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
}
}