我正在尝试将PHP的响应转换为swift Dictionary,但我无法弄清楚如何做到这一点。
Swift代码
Alamofire.request(requestString, method: .post, parameters: data, encoding:URLEncoding.default, headers: [:]).responseJSON { (response) in
switch response.result {
case .success(_):
if let response = response.result.value as? [String: Any] {
let updatedData = response["existData"] as! NSDictionary
print(updatedData)
let updatedData2 = response["existData"] as? [String: [String: Int]]
print("updatedData2", updatedData2)
var convertData = [String: [String: Int]]()
for key in Array(updatedData.allKeys) {
var convertInsideData = [String: Int]()
if let array = updatedData[key] as? NSDictionary {
for (k, v) in array {
print(k, "-", v)
convertInsideData[k as! String] = v as! Int
}
}
convertData[key as! String] = convertInsideData
}
.....................
首先打印,
{
All = {
Maybelline = 2;
};
}
updatedData2 Optional(["All": ["Maybelline": 2]])
Maybelline - 2
第二次打印,然后在convertInsideData[k as! String] = v as! Int
{
All = {
Maybelline = 2;
Sephora = 2;
};
}
updatedData2 nil
Sephora - 2
Maybelline - 2
Could not cast value of type 'NSTaggedPointerString' (0x10e374c88) to 'NSNumber' (0x10d0ad600).
2017-11-14 23:52:04.939332+0800 LeanCloudStarter[10014:272299] Could not cast value of type 'NSTaggedPointerString' (0x10e374c88) to 'NSNumber' (0x10d0ad600).
PHP的响应应该是这样的
$existData = array("All"=>array("Maybelline"=>2, "Sephora"=>2));
echo json_encode("existData"=>$existData));
答案 0 :(得分:3)
我建议您使用选项,然后您的Int值似乎是Json中的String,请尝试:
for (k, v) in array {
print(k, "-", v)
if let stringV = v as? String {
convertInsideData[k as! String] = Int(stringV)
} else if let numberV = v as? NSNumber {
convertInsideData[k as! String] = v.intValue
}
}