I am trying to build an app that displays Currency exchange rates using the Alpha Vantage API for iOS. I have built the functions but can't figure out how to access the exact json value which is "5. Exchange Rate".
Here is some of the code and the json data to help explain better:
The URL Built:
func USDtoEUR(_ completionHandler: @escaping (_ success: Bool, _ quotes: [String:AnyObject]?, _ error: String?) -> Void) {
let urlString = "https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=USD&to_currency=EUR&apikey=NP3M8LL62YJDO0YX"
let session = URLSession.shared
let url = URL(string: urlString)!
let request = URLRequest(url: url)
let task = session.dataTask(with: request, completionHandler: { data, response, error in
if error != nil {
completionHandler(false, nil, error!.localizedDescription)
}
else {
do {
let result = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary
if let dictionary = result["Realtime Currency Exchange Rate"] as? [String:AnyObject]! {
completionHandler(true, dictionary, nil)
}
else {
completionHandler(false, nil, nil)
}
} catch {
completionHandler(false, nil, "Unable to process retrieved data.")
}
}
})
task.resume()
}
The Quotes in the view controller
func usdQUotesRequest() {
USDClient().USDtoEUR() { success, newQuote, error in
if success {
self.usdtoeurquote = newQuote
DispatchQueue.main.async {
self.stopActivityIndicator()
self.Refresh.isEnabled = true
}
} else {
DispatchQueue.main.async {
self.displayAlert("Unable to Retrieve Latest Conversion Rates", message: "\(error!)")
self.stopActivityIndicator()
self.Refresh.isEnabled = true
}
}
}
// The Quotes being showing after touching the USD button:
@IBAction func usdConversions(_ sender: Any) {
self.displayAlert("Alert!", message: "USD Selected")
let usdVal = (outputCurrency1.text! as NSString).floatValue
let euroValue = usdVal * (usdtoeurquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", euroValue)
let gbpVal = usdVal * (usdtogbpquote["5. Exchange Rate"] as! Float)
outputCurrency3.text = String(format: "%.2f", gbpVal)
let cnyVal = usdVal * (usdtocnyquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", cnyVal)
let cadVal = usdVal * (usdtocadquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", cadVal)
let inrVal = usdVal * (usdtoinrquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", inrVal)
let sekVal = usdVal * (usdtosekquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", sekVal)
let rubVal = usdVal * (usdtorubquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", rubVal)
let nzdVal = usdVal * (usdtonzdquote["5. Exchange Rate"] as! Float)
outputCurrency2.text = String(format: "%.2f", nzdVal)
}
The Raw JSON Data:The json data on the webpage