我无法弄清楚如何解决这个问题。
这来自用于构建简单天气应用程序的youtube教程。 该教程于2015年3月上传,因此在Swift的早期版本中编写,在那里工作,当前的Swift 2没有。
我得到的错误是:"无法调用' jsonObjectWithData'使用类型'的参数列表(NSData,options:nil,error:NSError)'"
func getWeatherData(urlString:String) {
let url = NSURL(string: urlString)
let task = NSURLSession.sharedSession().dataTaskWithURL(url!){ (data, response, error) in
dispatch_async(dispatch_get_main_queue(), {
self.setLabels(data)
})
}
task.resume()
}
func setLabels(weatherData: NSData) {
var jsonError: NSError
let json = NSJSONSerialization.JSONObjectWithData(weatherData, options: nil, error: jsonError)
if let name = json["name"] as? String {
self.ResultLabel.text = name
}
}
答案 0 :(得分:3)
如果你想为Swift 2准备好这个代码,你必须运行JSONParser并尝试捕获可能的错误。
private func httpGetRequest(request: NSURLRequest!, callback: (NSData?, String?) -> Void) {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if error != nil {
callback(nil, error!.localizedDescription)
} else {
callback(data, nil)
}
}
task!.resume()
}
func setLabels(weatherData: NSData) {
do {
let json = try NSJSONSerialization.JSONObjectWithData(weatherData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
if let name = json["name"] as? String {
self.resultLabel.text = name
}
} catch {
print(error)
self.resultLabel.text = "Lorem Ipsum"
}
}
func loadWeatherData() {
let weatherRequest = NSMutableURLRequest(URL: NSURL(string: "Your URL String goes here")!)
httpGetRequest(weatherRequest){
(data, error) -> Void in
if error != nil {
print("Error: \(error)")
} else {
self.setLabels(data!)
}
}
}
希望这有助于解决您的问题。
答案 1 :(得分:1)
试试这个:
/Data Dictionary/Web Scripts/org/alfresco
答案 2 :(得分:1)
在swift 3.0和Swift 4.2中 试试这个...
do {
let jsonData = try JSONSerialization.data(withJSONObject: your array or dictionary, options: JSONSerialization.WritingOptions()) as Data
let json = try JSONSerialization.jsonObject(with: jsonData as Data, options: JSONSerialization.ReadingOptions(rawValue: UInt(0)))
}
catch
{
}
答案 3 :(得分:0)
您需要使用NSJSONSerialization.JSONObjectWithData(...)
将错误指针传递到&
。
let json = NSJSONSerialization.JSONObjectWithData(weatherData, options: nil, error: &jsonError) // &jsonError points to the NSErrorPointer of the NSError object
答案 4 :(得分:0)
在swift 3中你可以试试这个:
func setLabels(weatherData: NSData) { do { var jsonError: NSError let json = try JSONSerialization.jsonObject(with: weatherData as Data, options: []) as! NSDictionary if let name = json["name"] as? String { self.ResultLabel.text = name } } catch { } }
答案 5 :(得分:-1)
在Swift 3中,您可以使用以下代码修复相同的错误:
do{
let jsonData = try JSONSerialization.jsonObject(with: (data)!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String: AnyObject]
}catch{
print("Error while parsing JSON: Handle it")
}