如何存储嵌套字典值

时间:2016-09-11 16:46:33

标签: ios arrays swift dictionary nested

我想存储嵌套字典的值,以便我的集合视图可以在以后使用它,而不必每次都循环搜索它。如果我尝试将循环放在我的cellforindexatpath函数中,我也认为它不会起作用(我可能是错的)。 “让能力阵容:[能力] = .....”在我的班级里面

最终我想要abilitiesArray =能力。 “heroForDetails.hero.abilities”是一个[String:[Ability]]所以我想返回[Ability],其执行者为heroForDetails.hero.id == heroId,因为在heroForDetails.hero.abilities中有多个键:值对。当前错误缺少关闭中的返回预期返回[能力]。

let abilitiesArray: [Ability] = { () -> ([Ability]) in
    let val = heroForDetails.hero.abilities
    for (heroId, abilities) in val {

        if heroForDetails.hero.id == heroId {
            return abilities
        }
    }
}()

“能力”是我计划使用的数组

   func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("AbilitiesCell", forIndexPath: indexPath) as? AbilitiesCell {

        let ability: Ability
        ability = abilitiesArray[indexPath.row]
        cell.configureCell(ability)
        return cell

    }else {
        return UICollectionViewCell()
    }
}

我希望我能很好地解释这一点。我刚开始学习编码,所以任何帮助都会很棒。我也可能完全错了。

2 个答案:

答案 0 :(得分:1)

在您的第一个代码段中,您似乎正在使用密钥在val字典中查找项目。我希望这就是你想要做的。要做到这一点,您不需要遍历整个字典。这样做很慢。 (O(n))您可以使用下标来使用密钥(heroForDeails.hero.id变量)访问字典。这要快得多(O(1))。

您可以将整个代码段缩短为一行:

let abilitiesArray = heroForDetails.hero.abilities[heroForDetails.hero.id]!

另外,我在你的帖子中没有看到问题...

答案 1 :(得分:0)

您可以通过

访问字典

let val = heroForDetails.hero.abilities let abilities = val[heroForDeails.hero.id]

至于在你的cellforindexatpath中访问它,它应该没问题。不要担心关闭。