无法转换类型' NSTaggedPointerString'到' NSNumber' - 从PHP到Swift

时间:2017-11-14 15:54:27

标签: php ios swift type-conversion

我正在尝试将PHP的响应转换为swift Dictionary,但我无法弄清楚如何做到这一点。

  1. 想知道为什么我使用[String:[String:Int]]不起作用。
  2. 试图使用NSDictionary,但不要认为这是一种正确的方式,但它似乎差不多。
  3. 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));
    

1 个答案:

答案 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
    }
}