2017-05-17 35 views
-3

这是我的网址响应无法投类型的值 '__NSCFNumber'(0x1105dc3c0)到 '的NSString' 雨燕3

{ 
"base": "EUR", 
"date": "2017-05-16", 
"rates": { 
    "AUD": 1.492, 
}} 

这是我的代码

Alamofire.request("http://api.fixer.io/latest").responseJSON { response in 
     guard let JSON = response.result.value else{ 
      print("Error") 
      return 
     } 
      print("JSON: \(JSON)") 
     let dict = JSON as! NSDictionary 
     let base : String = dict["base"] as! String 
     print("Base:", base) 
     let date : String = dict["date"] as! String 
     print("Date:", date) 
     let rateDict = dict["rates"] as! NSDictionary 
     let aud : String = rateDict["AUD"] as! String 
     print("AUD:", aud) 
    } 

在线路令澳元:String = rateDict [“AUD”] as!字符串上面标题中提到的消息存在错误。这里发生了什么事。请任何人帮助我。

+0

它是一个数字,你试试用它强制强制转换为string,这就是发生的事情 - 正如错误信息明确指出的那样。看看json,看看1.492 – luk2302

回答

0

这是一个浮点而不是字符串。铸造是浮动

let aud = rateDict["AUD"] as! Float 

编辑:避免力铸造,因为这可能会崩溃您的应用程序,如果没有预期的数据。下面 使用代码将防止崩溃

if let rateDict = dict["rates"] as? [String : Any] { 
    if let aud = rateDict["AUD"] as? Float { 
     print("\(aud)") 
    } 
} 
+0

没有“”,实际上强制转换为“Float”会导致崩溃。 – vadian

+0

仅当json结构不如上述时。我将更新 –

+0

不,即使值是浮点数,也会崩溃。你必须投下“双”。您编辑的代码将永远不会打印“审计”费率。 – vadian

2

你可以把它转换成字符串一样,

let aud : String = String(rateDict["AUD"]) 

OR

let aud : String = NSString(format: "%0.2f", rateDict["AUD"]) as String