How can I group TableView items from a dictionary in swift?
You can use struct for that and here is example:
import UIKitclass TableViewController: UITableViewController { var names = ["Vegetables": ["Tomato", "Potato", "Lettuce"], "Fruits": ["Apple", "Banana"]] struct Objects { var sectionName : String! var sectionObjects : [String]! } var objectArray = [Objects]() override func viewDidLoad() { super.viewDidLoad() for (key, value) in names { println("\(key) -> \(value)") objectArray.append(Objects(sectionName: key, sectionObjects: value)) } } // MARK: - Table view data source override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return objectArray.count } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return objectArray[section].sectionObjects.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell // Configure the cell... cell.textLabel?.text = objectArray[indexPath.section].sectionObjects[indexPath.row] return cell } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return objectArray[section].sectionName }}
Swift 2
you dictionary example
var dic:Dictionary<String,String> = ["key":"value","key1":"value2"]
Your table
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell var key = Array(self.dic.keys)[indexPath.row] var value = Array(self.dic.values)[indexPath.row] cell.text = key + value }
If you want it sorted use the global sorted function to sort the dictionary.
import UIKitclass TableViewController: UITableViewController { var names = ["Vegetables": ["Tomato", "Potato", "Lettuce"], "Fruits": ["Apple", "Banana"]] var namesSorted = [String, Array<String>]() override func viewDidLoad() { super.viewDidLoad() // Sort names namesSorted = sorted(names) { $0.0 < $1.0} // namesSorted = ["Fruits": ["Apple", "Banana"], "Vegetables": ["Tomato", "Potato", "Lettuce"]] } // MARK: - Table view data source override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return namesSorted.count } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return namesSorted[section].1.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell // Configure the cell... cell.textLabel?.text = namesSorted[indexPath.section].1[indexPath.row] return cell } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return namesSorted[section].0 }}