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:-
我有一个3类,我用作一个部分。在该部分中,我必须填充字典数组中的数据。这是我的代码: -
var sections = [Category A, Category B, Category C]
var itemsA = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
var itemsB = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
var itemsC = [["Item": "item A","ItemId" : "1"],["Item": "item B","ItemId" : "2"],["Item": "item C","ItemId" : "3"]]
func numberOfSections(in tableView: UITableView) -> Int {
return self.sections.count
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.sections[section]
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ??
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "StoreCell") as! UITableViewCell
????
????
return cell
}
The items array I need to populate into table category wise. If anyone can answer. Thank you!
我需要将items数组填充到表类别中。如果有人可以回答。谢谢!
2 个解决方案
#1
10
If itemA array for Category A, itemB array for Category B and so on then you can return array count in numberOfRowsInSection
this way.
如果类别A的itemA数组,类别B的itemB数组等等,则可以通过这种方式返回numberOfRowsInSection中的数组计数。
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.
注意:如果您创建单个Array结构或自定义类,它将减少单个数组的所有数组,那就更好了。
#2
18
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.
如果您还为字典使用自定义结构,则仍可以改进代码。
#1
10
If itemA array for Category A, itemB array for Category B and so on then you can return array count in numberOfRowsInSection
this way.
如果类别A的itemA数组,类别B的itemB数组等等,则可以通过这种方式返回numberOfRowsInSection中的数组计数。
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.
注意:如果您创建单个Array结构或自定义类,它将减少单个数组的所有数组,那就更好了。
#2
18
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.
如果您还为字典使用自定义结构,则仍可以改进代码。