我下載數據,並在viewDidLoad()
使用下面的代碼處理它:斯威夫特/ NSURLSession JSON下載/意外發現零而展開的可選值
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)
打印出正確的解釋。 print(dollarToDollarString)
打印出正確的期望字符串我想要爲:「可選(1.1303)」
但是,當我想有一個按鈕被按下,與使用String在dollarToDollarString
:
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"
}
我得到unexpectedly found nil while unwrapping an Optional value
on let dollarExchangeRateDouble = Double(dollarExchangeRateStr)!
。
我錯過了什麼?爲什麼字符串nil
?我早些時候打印了正確的值...爲什麼一旦我想稍後使用它,爲什麼它不再是我的字符串的一部分?非常感謝幫助。
它是打印擴展。與print()相同# –
那麼SpeedLog.print(「DOLLAR下載」,dollarExchangeRateStr)是什麼打印出來的? –
'dollarBtnFunc [405]:DOLLAR downloaded可選(0.88472)' –