2016-04-18 12 views
1

私は奇妙な問題に悩まされています。 Alamofire経由でJSON応答を解析しているときに、エラーメッセージを文字列または数値にキャストするかどうかにかかわらずエラーをスローする変数を取得したい場合は、毎回エラーメッセージを変更します。/ このような文字列:JSON辞書の値を正しく変換できません

let kolicina = jsonCategory["kolicina"] as! String 

if Int(kolicina) > 0 { 

私はエラーを取得する:

"Could not cast value of type '__NSCFNumber' (0x10f051368) to 'NSString' (0x10e627b48)."

私がするNSNumberにキャストしようとすると:

let kolicina = jsonCategory["kolicina"] as! NSNumber 

if kolicina.integerValue > 0 { 

私が手:

"Could not cast value of type 'NSTaggedPointerString' (0x10effcae8) to 'NSNumber' (0x10e5d32a0)."

これは私が辞書を印刷するとき、私はその特定の変数のために得るものです:

kolicina = 0; 

誰かが正しい方向に私を指すことができますか?

+1

をおそらくこれは何らかのループの中にあり、JSONには数字と文字列の組み合わせが含まれていますか? – Wain

答えて

2

アンラップ力がありません。これを試してみてください。 JSONを修正し、データを文字列または数値のいずれかにしておきます。両方を使用することはお勧めしません。

あなたはこのようなフォーマットを解析したい場合は、あなたがNSNumberとして、あるいはNSString、例えばとしてそれを解析しようとする必要があります:

:あなたはこのような何かを行うことができ > 0チェックと

let kolicina = jsonCategory["kolicina"] 

if let kolicinaString = kolicina as? String { 
... 
} else if let kolicinaInt = kolicina as? Int { 
... 
} 

if let kolicinaString = kolicina as? String, 
     kolicinaInt = Int(kolicinaString) where kolicinaInt > 0 { 

    print("String: \(kolicinaInt)") 
} else if let kolicinaInt = kolicina as? Int where kolicinaInt > 0 { 

    print("Int: \(kolicinaInt)") 
} 

又は三項演算子の使用:

let kolicinaInt = (kolicina is String) ? Int(kolicina as! String) : kolicina as? Int 

if kolicinaInt > 0 { 
    print("Kolicina: \(kolicinaInt)") 
} 
+0

確かにそれはループに入っていましたが、JSONメソッドを呼び出すときにJavaのようなものが無視されるように見えるので、AndroidバージョンではAPIの悪さがわかりません。どうもありがとう! –

+0

@LeoStarićJavaはそのようなことを無視しませんが、Java Objectは、Object.toStringを使って数値を含む 'String'に変換できます。つまり、 'String'を要求すると、オブジェクトは' String'に変換されることがあります。 – Sulthan

2

は、あなたがそこにある文字列と整数の組み合わせを持っているようだ

if let kolicina = jsonCategory["kolicina"] as? Int{ 
     // Success: your kolicina is Int 
     print(kolicina) 
    } 
    else{ 
     // Not an Int 
    } 
関連する問題