Ho una struttura Swift come questa.Impossibile trasmettere il valore di tipo 'NSTaggedPointerString' a 'NSNumber'
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
}
}
Da un'API, ottengo la seguente risposta JSON. Questo è il codice di stampa della variabile jsonDict
.
[
"totalfup": 96.340899,
"totalrem": 3548710948
]
Quando provo ad assegnare il valore del totalfup
alla proprietà totalData
, ottengo questo errore.
non potresti lanciare valore di tipo 'NSTaggedPointerString' a 'NSNumber'
Chiunque sa perché? Ho provato a cambiare il tipo di proprietà a float
e quindi l'intera struttura in classe, ma il problema si verifica ancora.
Grazie! Ha funzionato. Sai perché è questo? Tornando a Swift 1.2, non abbiamo dovuto convertire in 'NSString's, giusto? – Isuru
Non sono sicuro di Swift 1.2. Ma 'NSJSONSerialization' a volte deserializza il valore numerico come numero. Di sicuro, prima di convertire i valori da "NSDecimalNumber", prima controlliamo [object class] (dynamicType). – anhtu
Ho ottenuto lo stesso errore con un framework che stavo usando che legge i valori di configurazione da un file plist personalizzato nelle risorse del bundle (nessun JSON coinvolto). Avevo definito alcuni dei campi plist come 'String's, ma probabilmente l'API si aspettava che fossero' Number's. Cambiando il tipo in 'Numero 'risolto il problema. –