このようなSwift構造体があります。'NSTaggedPointerString'型の値を '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
}
}
APIから、私は次のJSON応答を取得します。これはjsonDict
変数のprintlnです。私はプロパティtotalData
にtotalfup
の値を代入しようとすると
[
"totalfup": 96.340899,
"totalrem": 3548710948
]
、私はこのエラーを取得します。
'をするNSNumber'
誰もが知っている理由に型 'NSTaggedPointerString' の値をキャストすることができませんでしたか?私はプロパティタイプをfloat
に変更しようとしましたが、その後は構造体全体をクラスに変更しようとしましたが、それでも問題は発生します。
ありがとうございます!それはうまくいった。なぜこれが分かっていますか? Swift 1.2に戻って、私たちは 'NSString'sに変換する必要はありませんでしたか? – Isuru
Swift 1.2についてはわかりません。しかし、NSJSONSerializationは数値を数値として逆直列化することがあります。確かに、NSDecimalNumberから値を変換する前に、まず[object class](dynamicType)をチェックしてください。 – anhtu
バンドルのリソース(JSONは関係ありません)のカスタムplistファイルから設定値を読み取るために使用していたフレームワークで同じエラーが発生しました。私はplistフィールドのいくつかを 'String'sとして定義しましたが、APIはそれらが' Number'sであると期待していました。タイプを「番号」に変更することで問題が解決されました。 –