2016-09-11 13 views
1

ネストされた辞書の値を保存して、後でコレクションのビューでループを繰り返す必要がなく、毎回それを見つけることができます。私もcellforindexatpath関数にループを入れようとするとうまくいきません(私は間違っている可能性があります)。 "let abilitiesArray:[能力] = ....."は私のクラスの中にありますネストされた辞書の値を格納する方法

最終的に私は能力を欲します。 "heroForDetails.hero.abilities"は[String:[Ability]]なので、heroForDetails.hero.id == heroIdのheroForDetails.hero.abilitiesに複数のkey:valueのペアがあるため、[Ability]を返したいと思います。現在のエラーは、[能力]を返すと予想される終了時の戻り値がありません。

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() 
    } 
} 

のように使用する予定の配列です。私はちょうどコードを学習するようになったので、どんな助けも素晴らしいだろう。私もこれについて完全に間違っている可能性があります。

答えて

1

最初のコードスニペットでは、キーを使用してval辞書の項目を検索しているようです。私はそれがあなたがしたいことだと思います。これを行うには、辞書全体をループする必要はありません。それは非常に遅いです。 (O(n))サブスクリプトを使用して、キー(heroForDeails.hero.id変数)を使用して辞書にアクセスできます。これははるかに高速です(O(1))。あなたが1行に全体のスニペットを短くすることができ

:また

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

、私はあなたがそれに答えるために管理し、質問を見ていないためにあなたのポストに質問...

+0

が表示されません良い。これは私が必要としていたもので、現在は機能しています。ありがとう! (問題はタイトルにあった) – Apple

0

あなたのcellforindexatpathでそれをアクセスする限り

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

で辞書にアクセスすることができ、それだけで問題ないはずです。閉鎖を心配しないでください。

関連する問題