2017-05-17 5 views
-3

Diese Antwort meiner url istkann nicht Wert vom Typ gegossen '__NSCFNumber' (0x1105dc3c0) auf 'NSString' Swift 3

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

Und dies ist mein Code

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) 
    } 

In Line let Aud : String = rateDict ["AUD"] als! String gibt es einen Fehler mit der Nachricht wie oben im Titel erwähnt. Was passiert hier. Bitte, bitte hilf mir.

+0

es eine Zahl ist und Sie versuchen, Guss zu zwingen, es zu String, Genau das passiert - wie die Fehlermeldung übrigens deutlich sagt. Schau dir einfach den JSON an und sieh zu, dass es keine "" um den 1.492 gibt. – luk2302

Antwort

0

Es ist ein Fließkomma, kein String. Besetzung ist

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

bearbeiten zu schweben: Kraft Gießen zu vermeiden, als dass Ihre Anwendung abstürzen kann, wenn die Daten nicht zu erwarten. Verwendung von Code unten wird Abstürze verhindern

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

Eigentlich erzwungenes Casting auf 'Float' verursacht einen Absturz. – vadian

+0

Nur wenn die JSON-Struktur nicht wie oben ist. Ich werde aktualisieren –

+0

Nein, es stürzt immer ab, auch wenn der Wert eine Gleitkommazahl ist. Du musst nach "Double" umwandeln. Ihr bearbeiteter Code wird niemals die 'aud' Rate drucken. – vadian

2

Sie können es wie in String konvertieren,

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

ODER

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