videoperson
videoperson

Reputation: 139

Swift: How to make a selected cell NSLog the corresponding value and key from a dictionary

I have a TableViewController that is populated by a dictionary. My goal is that when I click a cell from the tableView it will NSLog the cell's name from the dictionary as well as the corresponding value.

For example if I have a dictionary: var profiles = ["Joe": 1, "Sam": 2, "Nancy": 3, "Fred": 4, "Lucy": 5]

When I click the Sam it would show up "Sam. 2" or something like that. Any help would be great.

Here's a sample of my code (TableView) :

class ProfileTableViewController: UITableViewController {

var person = people ()

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
  let row = indexPath.row
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as UITableViewCell
    let myRowKey = person.typeList[row]
    let myRowData = person.profiles[myRowKey]
    cell.textLabel!.text = myRowKey

    cell.textLabel?.text = String(myRowKey)
     return cell

}


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

   // Here's where I'm at

}

Here's my swift file:

class people {
var profiles = ["Joe": 1, "Sam": 2, "Nancy": 3, "Fred": 4, "Lucy": 5]
var typeList:[String] { //computed property 7/7/14
    get{
        return Array(profiles.keys)
    }





    }

Upvotes: 1

Views: 427

Answers (2)

AstroCB
AstroCB

Reputation: 12367

So, ideally, you want to use the index path that the method provides to grab whatever cell was selected.

Once you have that, you can extract the text from the cell and check with the dictionary.

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    // Lots of optional chaining to make sure that nothing breaks
    if let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath) { // Get the cell
        if let cellTextLabel: UILabel = cell.textLabel { // Get the cell's label
            if let name: String = cellTextLabel.text { // Get the text from its label
                println("\(name): \(profiles[name])") // Check with the dictionary and print out the corresponding value
            }

        }
    }
}

Upvotes: 1

Tokuriku
Tokuriku

Reputation: 1352

I would get the text in the label and use it to search the dictionary as such:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

   // Get the cell for that indexPath
   var cell = tableView.cellForRowAtIndexPath(indexPath) as UITableViewCell!

   // Get that cell's labelText
   let myKey = cell.textLabel?.text

   // Output the key and it's associated value from the dictionary
   println("\(myKey): \(person.typeList[myKey])")

}

Upvotes: 1

Related Questions