【问题标题】:Expression implicity coerced from "error?" to Any表达式隐含地从“错误?”中强制转换。去任何
【发布时间】:2018-02-17 04:08:54
【问题描述】:

我有这个错误:

表达式隐含从“错误?”到任何

我不知道是什么意思,希望能得到帮助。

let task = URLSession.shared.dataTask(with: url) { (data,response, error) in
    if error != nil {
        print(error)
    } else {
        if let urlContent = data {
            do {
                let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers)
                print(jsonResult)
            } catch {
                print("JSON Processing Failed")
            }
        }
    }
}

task.resume()

【问题讨论】:

  • 试试print(error as Any)

标签: swift swift3 error-handling


【解决方案1】:

检查这一行:

print(error)

您正在打印一个可选值。你应该用if let解开它。

if let error = error {
    print(error)
}

【讨论】:

  • @JeremyP 你说得对,它更干净。编辑了我的答案。
  • 我认为guard error == nil else { print(error); return }n 是更好的意图陈述。它取消了 else 子句,并使闭包的主体(有时称为快乐路径)更靠近左侧且更具可读性。
  • @Abizem 我也会这样做,但是如果你想在“悲伤的道路”之后做其他事情,最好这样。
  • @Abizern 一般而言,if let 更简洁,并且更好地反映了程序的结构,因为缩进并不存在。但是,在这种情况下,它正在处理错误情况,所以我可能会使用 guard 语句。
  • 不,再想一想,if 在这种情况下会更好,因为您不需要return,也不需要强制展开。
猜你喜欢
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多