【问题标题】:IOS: Call can throw, but is not marked with 'try' and the error is not handled [duplicate]IOS:调用可以抛出,但没有标记'try'并且错误未处理[重复]
【发布时间】:2017-07-11 02:08:10
【问题描述】:

在谷歌搜索该主题并阅读其他人对其他主题的答案并将他们的建议实施到我的之后,我仍然无法弄清楚。

在我的代码中:

import Foundation

protocol WeatherServiceDelegate {
     func setWeather(weather: Weather) 
}

class WeatherService {
     var delegate: WeatherServiceDelegate?

     func getWeather(city: String) {
         let path = "http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1"
         let url = URL(string: path)!
         let session = URLSession.shared
         let task = session.dataTask(with: url) { (data: Data?, response: URLResponse?, error: Error?) -> Void in
             if let data = data {
                 //print(">>>>\(data)")

                 let json = JSON(data: data)
             }
         }

         task.resume()
      }  
}

我从这一行得到错误。 JSON 中的“J”正下方的红色小箭头...

let json = JSON(data: data)

错误是:

调用可以抛出,但没有标记'try'并且错误没有被处理

【问题讨论】:

  • 您需要将数据{}括号内的所有内容放在 do {} catch{} 块内,并将 let json = JSON(data: data) 更改为 let json = try JSON(data: data)
  • 阅读摇摆语言指南。说真的。

标签: swift


【解决方案1】:

你想做的是以下。

var json: [AnyHashable:Any]?

do {
    json = try JSON(data: data)
} catch _ {
    json = nil
}

xcode 想说的是,调用 JSON(data: data) 会引发错误,你应该把它放在 try-catch

【讨论】:

  • 不幸的是我得到了更多的错误......
  • 它在说什么?
  • @HarrySingh 如果你要去catch,那么使用try? 是没有意义的。要么使用try,要么删除catch
  • 是的,我的坏@Alexander
  • @HarrySingh 整个东西都可以用let son = try? JSON(data: data)代替
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多