2016-11-07 6 views
0

Ich habe JSON-Daten als NSDictionary Typ serialisiert, zum BeispielSwift Parse JSON mit Variablentypen

{ data = 0; } // "data":"0" (when I see its value in debugger) 

oder

{ data = 1; } //"data": Int64(1)(when I see its value in debugger) 

Ich versuche, auf diese Daten zuzugreifen, wie:

json["data"] as! Int 

, aber manchmal kann es nicht als Ganzzahl geparst werden, denn wenn es 0 ist, hat es String-Wert, und ich bekomme den Fehler:

Could not cast value of type 'NSTaggedPointerString' (0x109b54b90) to 'NSNumber' 

Was ist falsch, und wie kann ich das lösen?

Antwort

2

Conditionals zur Rettung!

let data: Int = json["data"] as? Int ?? 0 

Wenn der der Wert für die "data" Schlüssel fehlt oder "0" die data es wird auf Null gesetzt werden.

0

Für eine gute Antwort, müssen Sie mehr Kontext, was Code, der zu diesen 2 Werten führte der Debugger ist. Es ist seltsam, dass die Y-Strings von 0, aber andere Zahlen Ints ergeben.

Hier ist eine Lösung für das unmittelbare Problem:

let x = json["data"] 
let y = x as? Int ?? Int(y as! String)! 

Dies wird zuerst (sicher) versuchen, Int zu werfen. Wenn das fehlschlägt, erzwingt es die Umwandlung in String, und führt es dann über den Initialisierer Int aus, damit es analysiert werden kann.