在collectionview中加载的图像上出现的名称不正确

时间:2017-09-28 12:00:29

标签: ios json swift parsing

这是我的json回复......

{
    "success": 1,
    "TotalRevenue": “123.12 K",
    "Productdata": [
        {
            "product_id": "5",
            "product_name": “abc”
            "product_images": [
                {
                    "id": "938",
                    "image_url": "http://myApp.direct.com/public165_1_image_15",
                    "is_default": "1"
                }

            ]
        }

这就是我解析这些数据的方法......

 if let projectData = result["Productdata"] as? [[String:Any]] {

 let images = projectData.flatMap({ $0["product_images"] as? [[String: Any]] }).flatMap({ $0 })

let productName = projectData.flatMap({ $0["product_name"] as? String })
self.arrayOfNames = productName
self.arrayOfId = imageIds

}

我已经提取了名称并将它们分配给上面的数组(id和imageurl也被提取出来了。但是现在我们只考虑名称提取。)

然后我从包含所有名称的数组中取出每个名字,如此......

                            for names in self.arrayOfNames {
                                DispatchQueue.global(qos: .background).async
                                    {
                                        self.theNameArray.append(names)

                                        DispatchQueue.main.async {
                                            self.collectionView.reloadData()
                                        }
                                }
                            }

最后,为了能在colletionview中的每张图片下获得相应的名称,我这样做......

cell.recipeImageView.image = self.arrayOfURLImages[indexPath.row]
cell.nameLabel.text = self.arrayOfNames[indexPath.row]

在上面两行代码中,第一行显示了图像。但我的问题是名称没有正确显示,即图像的相应名称没有显示...而是任何随机名称都分配给任何图像。如何在正确的图像下获得正确的名称。

我确实通过了处理类似问题的帖子。但是我无法找到解决问题的方法。我知道这很简单......只处理键值对,但我和#39;我无法确切知道如何......

提前致谢...:)

1 个答案:

答案 0 :(得分:0)

我试图制作假人确保它是正确的,如果您发现任何问题,请告诉我

<强> ProductData

var productData : [[String : Any]] = [["id" : "1",
                                       "name" : "a",
                                       "images" : [[
                                                    "id" : "11",
                                                    "url" : "url_a"]
                                                   ]
                                        ],
                                      ["id" : "2",
                                       "name" : "b",
                                       "images" : [[
                                                    "id" : "22",
                                                    "url" : "url_b"]
                                                   ]
    ]
]

此数组的输出如下

enter image description here

正在解析

let images = productData.flatMap({ $0["images"] as? [[String: Any]] }).flatMap({ $0 })

let imageIds = images.flatMap({ $0["id"] as? String })
let productName = productData.flatMap({ $0["name"] as? String })
let productURL = images.flatMap({ $0["url"] as? String })
print(productURL)// output 1

print(productName)//output 2

解析输出

enter image description here

网址列表和名称列表的顺序相同。检查。