2016-07-05 46 views
1

我有一個字典定義爲:夫特 - 設置行數從字典

var episodesDictionary = [String: [Episode]]() 

字典中的每個項可以具有一定數量發作,例如:

title1: episode1, episode2, episode3 
title2: episode1, episode2 
title3: episode1, episode2, episode3, episode4 

我想要的是建立一張桌子。所以在numberofSectionsInTableView我返回

episodesDictionary.count 

問題是我不知道如何獲得每個部分的行數。我試過如下:

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

    var episodes = [Int]() 

    for (key, value) in episodesDictionary { 
     var shows = [String]() 
     shows.append(key) 
     episodes.append(value.count) 
    } 

    return episodes[section] 

} 

但我總是得到0

的episodesDictionary正在從從服務器獲得一個JSON文件解析。

關於如何設置每個部分的行的任何想法?

謝謝。

+0

所以,你要對應於每個部分發作的次數int數組? – Alexander

回答

1

字典不保留其鍵 - 值對的排序。因此,你不能創建一個數組,其元素與相應標題的片段數相對應,因爲他們不能保證字典將按照你所期望的排序順序被枚舉。

相反,你需要從標題的字典集數:

let dict = [ 
    "title1" : ["episode1", "episode2", "episode3"], 
    "title2" : ["episode1", "episode2"], 
    "title3" : ["episode1", "episode2", "episode3", "episode4"], 
] 

var episodeCounts = [String : Int]() 

for (title, episodes) in dict { 
    episodeCounts[title] = episodes.count 
} 

print(episodeCounts) //prints ["title1": 3, "title2": 2, "title3": 4] 
0

好像你正在使用的可能不是最好的選擇字典。嘗試使用一個元組,如:

let elements: [(title: String, episodes: [String])] = [ 
    ("title1", ["episode1", "episode2", "episode3"]), 
    ("title2", ["episode1", "episode2"]), 
    ("title3", ["episode1", "episode2", "episode3", "episode4"]), 
] 

這將讓你處理numberOfRowsInSection這樣的:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return elements[section].episodes.count 
}