I-Daten herunterlade und Umgang mit dem folgenden Code in den viewDidLoad()
mit:Swift/NSURLSession JSON download/unerwartet null gefunden, während ein optionalen Wert Abwickeln
NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "http://api.fixer.io/latest?base=USD")!, completionHandler: { (data, response, error) -> Void in
// Check if data was received successfully
if error == nil && data != nil {
do {
// Convert NSData to Dictionary where keys are of type String, and values are of any type
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject]
// Access specific key with value of type String
let dollarToDollarDict = json["rates"] as! NSDictionary
SpeedLog.print(dollarToDollarDict)
let dollarToDollarNSNumber = dollarToDollarDict.valueForKey("EUR")
let dollarToDollarString = String(dollarToDollarNSNumber)
SpeedLog.print(dollarToDollarString)
self.dollarExchangeRateStr = dollarToDollarString
} catch {
// Something went wrong
}
}
}).resume()
print(dollarToDollarDict)
druckt die richtige Wörterbuch. print(dollarToDollarString)
druckt den richtigen gewünschten String ich haben will als: „Optional (1,1303)“
Aber wenn ich will den String in dollarToDollarString
verwenden, indem eine Taste gedrückt hat, mit:
func dollarBtnFunc(button: UIButton!) {
if dollarExchangeRateStr != "" {
SpeedLog.print("DOLLAR downloaded", dollarExchangeRateStr)
let dollarExchangeRateDouble = Double(dollarExchangeRateStr)!
tableCounterData = ["\(numberInt) $", "\(numberInt * dollarExchangeRateDouble) €"]
} else if dollarExchangeRateStr == "" {
SpeedLog.print("DOLLAR not downloaded, Dollar = 0.89")
tableCounterData = ["\(numberInt) $", "\(numberInt * 0.89) €"]
}
currentButton = "dollarBtnFunc"
}
ich unexpectedly found nil while unwrapping an Optional value
auf let dollarExchangeRateDouble = Double(dollarExchangeRateStr)!
.
Was fehlt mir? Warum ist der String nil
? Ich habe den korrekten Wert früher gedruckt ... Warum ist es nicht mehr Teil meines Strings, wenn ich es später benutzen möchte? Hilfe wird sehr geschätzt.
es ist ein Druck-Erweiterung. ist das selbe wie 'print()' –
Also, was macht SpeedLog.print ("DOLLAR heruntergeladen", dollarExchangeRateStr) genau aus? –
'dollarBtnFunc [405]: DOLLAR heruntergeladen Optional (0.88472)' –