I have a 3 category which I was using as a section. In that section I have to populate data which is in array of dictionary. Here is my code:-
var sections =
Use a custom struct
struct Category {
let name : String
var items : [[String:Any]]
}
var sections = [Category]()
let itemsA = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
let itemsB = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
let itemsC = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
sections = [Category(name:"A", items:itemsA),
Category(name:"B", items:itemsB),
Category(name:"C", items:itemsC)]
func numberOfSections(in tableView: UITableView) -> Int {
return self.sections.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.sections[section].name
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let items = self.sections[section].items
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
let items = self.sections[indexPath.section].items
let item = items[indexPath.row]
print(item["ItemId"] as? String)
return cell
}
You can still improve the code if you are using a custom struct also for the dictionaries.
If itemA array for Category A, itemB array for Category B and so on then you can return array count in numberOfRowsInSection
this way.
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch (section) {
case 0:
return itemsA.count
case 1:
return itemsB.count
default:
return itemsC.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
switch (indexPath.section) {
case 0:
//Access itemsA[indexPath.row]
case 1:
//Access itemsB[indexPath.row]
default:
//Access itemsC[indexPath.row]
}
return cell
}
Note: It is batter if you create single Array of struct or custom class that will reduce all your array with single array.