Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect a Null value in NSDictionary

Tags:

ios

swift

nsnull

I have an NSDictionary that's populated from a JSON response from an API server. Sometimes the values for a key in this dictionary are Null

I am trying to take the given value and drop it into the detail text of a table cell for display.

The problem is that when I try to coerce the value into an NSString I get a crash, which I think is because I'm trying to coerce Null into a string.

What's the right way to do this?

What I want to do is something like this:

cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString 

Here's an example of the Dictionary:

Printing description of sensor: {     "created_at" = "2012-10-10T22:19:50.501-07:00";     desc = "<null>";     id = 2;     "latest_value" = "<null>";     name = "AC Vent Temp";     "sensor_type" = temp;     slug = "ac-vent-temp";     "updated_at" = "2013-11-17T15:34:27.495-07:00"; } 

If I just need to wrap all of this in a conditional, that's fine. I just haven't been able to figure out what that conditional is. Back in the Objective-C world I would compare against [NSNull null] but that doesn't seem to be working in Swift.

like image 793
Jeff Avatar asked Jun 03 '14 23:06

Jeff


1 Answers

You can use the as? operator, which returns an optional value (nil if the downcast fails)

if let latestValue = sensor["latestValue"] as? String {     cell.detailTextLabel.text = latestValue } 

I tested this example in a swift application

let x: AnyObject = NSNull() if let y = x as? String {     println("I should never be printed: \(y)") } else {     println("Yay") } 

and it correctly prints "Yay", whereas

let x: AnyObject = "hello!" if let y = x as? String {     println(y) } else {     println("I should never be printed") } 

prints "hello!" as expected.

like image 167
Gabriele Petronella Avatar answered Oct 10 '22 17:10

Gabriele Petronella