skip to Main Content

this might be a common situation, but I was not able to figure out a way how to do it.

I have a dictionary with the stock amount for several items: dict = ["item1" : 2, "item2" : 5, "item3" : 10 ]

How can I now assign the keys and values to different labels in a tableView, using indexPath?

The logic I want to achieve:

cell.itemLabel.text = dict.[firstItemName]
cell.amountLabel.text = dict.[firstItemAmount]

2

Answers


  1. You can use map function to get separate array of key and values

    print(dict.map({$0.key}))
    print(dict.map({$0. value}))
    

    Try this:

    cell.itemLabel.text = dict.map({$0.key})[indexPath.row]
    cell.amountLabel.text = dict.map({$0.value})[indexPath.row]
    
    Login or Signup to reply.
  2. A dictionary as data source can be annoying because a dictionary is unordered.

    My suggestion is to map the dictionary to an array of a custom struct and sort the array by the keys

    struct Model {
        let name : String
        let value: Int
    }
    
    let dict = ["item1" : 2, "item2" : 5, "item3" : 10 ]
    
    let array = dict.map(Model.init).sorted{$0.name < $1.name}
    

    Then in the table view you can write

    cell.itemLabel.text = array[indexPath.row].name
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search