如何在Swift中从Dictionary中填充CollectionView

时间:2016-07-31 22:15:59

标签: ios swift uitableview uicollectionview uicollectionviewcell

我有一个视图控制器,上面有一个textField。当用户按下textField时,它会切换到tableView并使用我的字典中的"name"填充tableView。

我的字典数据如下:

var objects = [
{
    "id": "001",
    "typeTwo": "Poison",
    "name": "Bulbasaur",
    "type": "Grass"
},
{
    "id": "002",
    "typeTwo": "Poison",
    "name": "Ivysaur",
    "type": "Grass"
}]

......等等。

当用户选择一个单元格时,它会将名称传递回第一个VC并显示他们所选内容的小精灵图像。

一切正常。

然后用户可以按下一个分段为CollectionViewController的按钮,您可以看到显示的所有Pokemon。

我当时想做什么:

目前,我只是将CollectionView设置为仅使用上面相同的字典数据显示所有的口袋妖怪,但我想要的是,它只显示具有相同{{1}的口袋妖怪}

例如:

如果用户选择了"Type",其中包含Grass和Poison类型,那么当他们进入CollectionView时,它只会显示Pokemon也可以是Grass或Poison。

希望这是有道理的,如果您需要查看我的任何代码,请告诉我。

2 个答案:

答案 0 :(得分:1)

您可以使用过滤来过滤字典,只返回与您在谓词中编写的条件匹配的元素,这些元素在这里获得具有特定类型的小宠物:

var objects = [
    [
        "id": "001",
        "typeTwo": "Poison",
        "name": "Bulbasaur",
        "type": "Grass"
    ],
    [
        "id": "002",
        "typeTwo": "Fly",
        "name": "Ivysaur",
        "type": "Grass"
    ],
    [
        "id": "003",
        "typeTwo": "Poison",
        "name": "Ivysaur",
        "type": "Water"
    ]
]

var filteredObjects = objects.filter{

    let valueType = $0["type"]
    let valueTypeTwo = $0["typeTwo"]

    if (valueType == "Grass" || valueType == "Water") && valueTypeTwo == "Poison"
    {
        return true
    }

    return false
}


print(filteredObjects)

答案 1 :(得分:0)

您不应该使用字典作为集合视图的模型。字典是无序集合,集合视图显示对象的有序列表。

您展示的数据结构是一系列字典。这是一个非常有效的方法来存储集合视图的数据,因为数组 是一个有序的集合。

Mohamed的过滤字典的代码是过滤结果的好方法,但是您需要使用新的过滤后的数组作为集合视图的模型(数据)。