Я пытаюсь получить ответ JSON и хранить результаты в переменной. У меня были версии этого кода в предыдущих выпусках Swift, пока не была выпущена версия GM Xcode 8. Я просмотрел несколько похожих сообщений в StackOverflow: Swift 2 Parsing JSON - не может индексировать значение типа "AnyObject" и JSON Parsing в Swift 3.
Однако, кажется, что идеи, переданные там, не применяются в этом сценарии.
Как правильно разобрать ответ JSON в Swift 3? Что-то изменилось в том, как JSON читается в Swift 3?
Ниже приведен код (его можно запустить на игровой площадке):
import Cocoa
let url = "https://api.forecast.io/forecast/apiKey/37.5673776,122.048951"
if let url = NSURL(string: url) {
if let data = try? Data(contentsOf: url as URL) {
do {
let parsedData = try JSONSerialization.jsonObject(with: data as Data, options: .allowFragments)
//Store response in NSDictionary for easy access
let dict = parsedData as? NSDictionary
let currentConditions = "\(dict!["currently"]!)"
//This produces an error, Type 'Any' has no subscript members
let currentTemperatureF = ("\(dict!["currently"]!["temperature"]!!)" as NSString).doubleValue
//Display all current conditions from API
print(currentConditions)
//Output the current temperature in Fahrenheit
print(currentTemperatureF)
}
//else throw an error detailing what went wrong
catch let error as NSError {
print("Details of JSON parsing error:\n \(error)")
}
}
}
Изменить: Ниже приведен пример результатов вызова API после print(currentConditions)
["icon": partly-cloudy-night, "precipProbability": 0, "pressure": 1015.39, "humidity": 0.75, "precipIntensity": 0, "windSpeed": 6.04, "summary": Partly Cloudy, "ozone": 321.13, "temperature": 49.45, "dewPoint": 41.75, "apparentTemperature": 47, "windBearing": 332, "cloudCover": 0.28, "time": 1480846460]