【问题标题】:error in error handling - swift错误处理中的错误 - 迅速
【发布时间】:2017-05-03 12:01:57
【问题描述】:

我正在尝试在How do I validate an Australian Medicare number? 线程中使用验证医疗保险代码,

我替换以下行

let expression =try!NSRegularExpression(pattern:pattern, options: NSRegularExpressionOptions.CaseInsensitive)

下面的代码,

var expression :NSRegularExpression

do {
    expression = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive) 
} catch {
    // Handling error
    println("error medicare val")
}

但我遇到了错误

在 do-while 块中预期

大括号语句是一个未使用的分句

我不确定如何解决此错误。我正在使用 Xcode 6.2。

更新

我尝试了 Parth 的答案,但出现以下错误,

一行中的连续语句必须用';'分隔 对于这一行

expression = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)

还有

} catch let error as NSError {
            // Handling error
            print("error medicare val\(error)")
        }

代码得到

在 do-while 块中预期

大括号语句是一个未使用的分句

预期的表达方式

一行中的连续语句必须用';'分隔

【问题讨论】:

  • Xcode 6.2 附带 Swift 1.1,您在链接文章中找到的答案是用 Swift 2.1(或 2.0,我不确定)编写的。即使你已经修复了 do-try-catch 部分,可能还有许多其他部分需要修复,而且最近很难找到为 Swift 1 编写的文章。你不能升级你的 mac 并将你的 Xcode 更新到最新发布的版本?
  • @OOPer 感谢您的帮助。你是对的。我修复了该代码中的几行更改,但仍然有错误。是的,这个版本的文章很难找到,可惜这次我无法升级。

标签: swift


【解决方案1】:

正如我在评论中所写,很难将代码降级到古老的 Swift 1.x,它曾在很久很久以前的神话时代使用过......

所以,这一行可能是我可以帮助您降级的最后一件事了...

//Swift 2.x code
let expression = try! NSRegularExpression(pattern:pattern, options: NSRegularExpressionOptions.CaseInsensitive)

相当于 Swift 1.x 中的行是:

//Swift 1.x code
let expression = NSRegularExpression(pattern: pattern, options: nil, error: nil)!

几点:

  • do-try-catch 的错误处理最初是在 Swift 2 中引入的。在 Swift 1 中,您不能使用 dotrycatch 三个关键字中的任何一个来进行错误处理。您需要在 Swift 1.x 中使用error: 参数。
  • 如果pattern 是一个有效的正则表达式模式,初始化程序永远不会抛出错误。你不需要catch它,意思是error:可以是nil
  • pattern 不包含字母,因此您无需指定NSRegularExpressionOptions.CaseInsensitive,在 Swift 1.x 中,“无选项”由nil 指定。

Xcode 6 是目前可以为 App Store 构建应用程序的最古老的 Xcode,并且在不久的将来会随时将要求更改为 Xcode 7。如果您在此之前无法完成您的应用程序,您将无法将该应用程序提交到 App Store。我强烈建议您现在就尽一切努力更新您的 Xcode。

【讨论】:

    【解决方案2】:

    如下修改代码获取错误对象

    var expression: NSRegularExpression!
    
    do {
         expression = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive)
       } catch let error as NSError {
      // Handling error
      print("error medicare val\(error)")
    }
    

    【讨论】:

    • 感谢您的支持。我试过这个。但它在现有的基础上又增加了两个错误。
    • @ZuseeWeekin 你在哪里遇到错误让我知道
    • Xcode 6.2 自带 Swift 1.1,所以这段代码不能用 Xcode 6.2 编译。我相信您的代码适用于 Swift 2。
    • @ParthAdroja 我用这段代码的错误更新了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2016-08-18
    • 2017-04-22
    • 2014-11-22
    相关资源
    最近更新 更多