0

我正在使用来自 Swift 3.0(在 Xcode 8.0 中)的 nice guard 语句,并具有以下功能:

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 编译器两次抱怨包含我的保护语句的行:

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随后这条线甚至无法解析
  • 替换countwhere 中的,Int(s)但有相同的错误。

我应该如何更改我的代码才能编译?(我的意思是,我的意思是,我可以有一个很好的单一保护语句,当然我可以有多个保护,或者 ifs 或 switch,但是从我读到的关于保护语句的内容中,我应该能够有一个清晰可读的行)。

4

1 回答 1

0

为了解决这个问题,我建议您在保护语句中使用模型 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
    }
}
于 2016-10-01T17:48:56.420 回答