2016-07-31 112 views
0

填充的CollectionView我有上有一个文本框视图控制器。当用户按下textField时,它会跳转到tableView并使用我的字典中的"name"填充tableView。如何从词典中斯威夫特

我的字典数据如下:

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

...等等。

当用户选择的小区时,它把名称回到第一VC和示出了用于它们选择了什么的小宠物的图像。

这一切工作正常。然后

用户可以按下一个按钮,塞格斯到CollectionViewController,你可以看到显示的所有口袋妖怪。

我想什么然后做:

目前,我只是有的CollectionView设置使用上述相同的字典数据都只是显示宠物小精灵,但我想什么,是它仅显示有口袋妖怪相同

例如:

如果选择"Bulbasaur"用户,其中有各类草和毒的,那么当他们去的CollectionView,它只会显示Pokemon既可以是Grass也可以是Poison。

希望,这是有道理的,请让我知道如果你需要任何看到我的代码。

回答

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) 
+0

因此,在CollectionView中筛选了我的结果,但它没有正确执行。它只是用类型为Grass的口袋妖怪数量进行过滤,因此它只是在列表中显示了前14个口袋妖怪,而不是Pokemon本身,这是Grass类型。那有意义吗?我假设这是因为我没有使用indexPath? – Nick89

+0

是的,你应该显示从filteredObjects不是对象本身或添加代码显示在collectionView –

+0

啊是的,没有改变'cellForItemAtIndexPath'函数。现在工作。我唯一需要帮助的另一件事是在字典中检查“typeTwo”。由于Grass确实出现在''typeTwo'''中,所以这些口袋妖怪当前没有显示,因为我们只是用''type''进行过滤 - 是否有一种方法可以通过''type''和''typeType''进行过滤' ?谢谢 – Nick89

0

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

您所示的数据结构是字典的阵列。由于数组有序集合,因此这是存储集合视图的数据的完全有效方式。

穆罕默德的代码来过滤你的字典是对结果进行过滤的好方法,但你需要使用新的过滤阵列作为模型(数据)为您的集合视图。