Ich habe eine Swift-Struktur wie diese.Konnte den Wert vom Typ 'NSTaggedPointerString' nicht in 'NSNumber' umwandeln
struct Usage {
var totalData: Double
var remainingTotalData: Double
init(jsonData: NSData) {
var jsonDict = [String: AnyObject]()
do {
jsonDict = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String: AnyObject]
} catch {
print("Error occurred parsing data: \(error)")
}
totalData = jsonDict["totalfup"] as! Double
remainingTotalData = jsonDict["totalrem"] as! Double
}
}
Von einer API erhalte ich die folgende JSON-Antwort. Dies ist der Ausdruck der Variablen jsonDict
.
[
"totalfup": 96.340899,
"totalrem": 3548710948
]
Wenn ich versuche, den Wert der totalfup
die Eigenschaft zuweisen totalData
, bekomme ich diesen Fehler.
kann nicht Wert vom Typ 'NSTaggedPointerString' gießen 'NSNumber'
Wer weiß, warum? Ich habe versucht, den Eigenschaftstyp auf float
und dann die gesamte Struktur in Klasse zu ändern, aber immer noch tritt das Problem auf.
Vielen Dank! Das hat funktioniert. Weißt du warum das so ist? Zurück in Swift 1.2 mussten wir nicht zu 'NSString' konvertieren, oder? – Isuru
Ich bin mir nicht sicher über Swift 1.2. "NSJSONSerialization" deserialisiert manchmal den Zahlenwert als Zahl. Bevor Sie Werte von 'NSDecimalNumber 'konvertieren, sollten Sie zuerst [Objektklasse] (dynamicType) überprüfen. – anhtu
Ich habe den gleichen Fehler mit einem Framework, das ich verwendete, das liest Konfigurationswerte aus einer benutzerdefinierten PLIST-Datei in den Ressourcen des Bundles (kein JSON beteiligt). Ich hatte einige der Plist-Felder als 'String' definiert, aber die API erwartete wahrscheinlich, dass sie' Number's waren. Durch Ändern des Typs in "Number" wurde das Problem behoben. –