2017-01-21 3 views
1

Я пытался выяснить, как сохранить часть ответа JSON от Alamofire как переменной, чтобы сделать оператор if, и, похоже, не может найти, как это сделать.Сохранить результат Alamofire как переменная?

Я сделал кусок кода, чтобы использовать в качестве примера для вопроса, который состоит из следующих действий:

import UIKit 
import Alamofire 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     Alamofire.request("http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=44143256ee15e9c3f521ca062463dd8d").responseJSON { response in 
      print(response.result) // result of response serialization 

      if let JSON = response.result.value { 
       print("JSON: \(JSON)") 
      } 
     } 
    } 
} 

Я получаю следующий ответ из запроса API:

JSON: { 
base = stations; 
clouds =  { 
    all = 0; 
}; 
cod = 200; 
coord =  { 
    lat = "51.51"; 
    lon = "-0.13"; 
}; 
dt = 1485031800; 
id = 2643743; 
main =  { 
    humidity = 83; 
    pressure = 1026; 
    temp = "270.54"; 
    "temp_max" = "273.15"; 
    "temp_min" = "267.15"; 
}; 
name = London; 
sys =  { 
    country = GB; 
    id = 5091; 
    message = "0.0038"; 
    sunrise = 1484985141; 
    sunset = 1485016345; 
    type = 1; 
}; 
visibility = 7000; 
weather =  (
      { 
     description = haze; 
     icon = 50n; 
     id = 721; 
     main = Haze; 
    } 
); 
wind =  { 
    speed = 1; 
}; 
} 

Из этого Ответ JSON Я хотел бы сохранить описание погоды, чтобы я мог использовать следующее сообщение:

if var currentWeather = sunny { 
    return "Nice day!" 
} else { 
    return "Uh-Oh, keep warm!" 
} 

Если бы кто-нибудь мог мне помочь, я бы очень признателен! Если я должен использовать SwiftyJSON, чтобы облегчить это, я просто борется с этим некоторое время, и вам нужно это выяснить!

ответ

0

Вы можете разобрать свой результат после напечатанного ответа JSON:

guard let JSON = response.result.value as? [String:Any], 
    let weather = JSON["weather"] as? [[String:Any]] else { 
    print("Could not parse weather values") 
    return 
} 

for element in weather { 
    if let description = element["description"] as? String { 
     print(description) 
    } 
} 

Если вы хотите, чтобы сохранить результат, или сделать что-то, основываясь на определенный результат, как вы описали, вы можете вставить что-то другое вместо просто print(description) нравится:

if description == "sunny" { 
    //do something 
} 

Позвольте мне знать, если это имеет смысл. Имейте в виду, что ( и ) в консоли Xcode означает «Массив».

+0

Благодарим вас за поспешный ответ, попробуем, как только Xcode завершит обновление! Я понимаю большую часть того, как он работает, и, надеюсь, я начну понимать, как это сделать самостоятельно. – Miles

+0

Хорошее отношение. Дайте мне знать, если у вас проблемы @Miles –

+0

Я пробовал этот код, но я получаю 'Type Any, не имеет членов подстроки' на' let weather = JSON ["weather"] as? [[String: Any]] else {'line Я попытался также сменить его на AnyObject, но все равно ту же ошибку. – Miles

 Смежные вопросы

  • Нет связанных вопросов^_^