2017-05-17 34 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