2016-09-03 5 views
3

こんにちは皆、これは私の最初の投稿です。 私はTableViewで動的データを表示しようとしている:私はDictionary var dizionarioComuni : Dictionary<Character, Array<ComuneModel>> = [:]このように、オブジェクトComuneModelがnomeComune、numAbitantiとしてカスタムモデルの聖霊降臨祭のデータですので、TableViewで に私は得ることは、このコードを書いたのデータを持っていますセクションの数とそれが動作しますswift numberOfRowsInSection from dictionary

私はセクションのタイトルとしてこれらのキーを使用したいので、辞書のキーはCharachtersです。 質問は:テーブルビューの方法でnumberOfRowsInSectionを取得するにはどうすればよいですか?このメソッドのシグネチャは次のとおりです

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

anfは整数ですが、私のキーは文字です。私はこのコードで辞書のすべてのキーにアクセスしよう

var keys = dizionarioComuni.keys 

私は、キーを反復処理することができますが、その後どのように私は(特定のインデックスで(ComuniModelの)オブジェクトリストで特定のキーからアクセスすることができますセクション:Int)メソッドのパラメータですか?

私は同様の質問を検索しますが、このケースについては答えていません。 ありがとうたくさん

+0

dictonaryのあなたの実際のデータを投稿してください。 –

答えて

1

スウィフト辞書は順序がないので、ソートされたキーの別のリストを維持し、それを使ってデータにアクセスする必要があります。

var sortedKeys = dizionarioComuni.keys.sort() 

はその後numberOfRowsInSectionは次のようになります。

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return dizionarioComuni[sortedKeys[section]]?.count ?? 0 
} 

注:いつでもキーの変更のリストは、あなたのテーブルのデータをリロードする必要があります。


class MyTableViewController: UITableViewController { 
    var sortedKeys = [Character]() { 
     didSet { 
      if oldValue != sortedKeys { 
       // reload tableView 
       tableView.reloadData() 
      } 
     } 
    } 
    var dizionarioComuni = [Character: [ComuneModel]]() { 
     didSet { 
      sortedKeys = dizionarioComuni.keys.sort() 
     } 
    } 
} 
+0

それは私に範囲外のエラーインデックスを与えますが、あなたのコードは正しいですし、コンパイルしています。何が問題なのかを理解しようとしています。 – Sandro

+0

更新された回答を確認してください。これは 'didSet'プロパティオブザーバを使ってソートされたキーのリストを保持します。 – vacawama

+0

まず、お時間をいただきありがとうございます@vacawama。しかし、コードの行{var dizionarioComuniは私が理解しようとしているエラーを与える.. – Sandro