当前位置: 首页 > 面试题库 >

在NSDictionary中检测Null值

宗增
2023-03-14
问题内容

我有一个NSDictionary从API服务器的JSON响应中填充的。有时,该字典中某个键的值是Null

我正在尝试采用给定的值并将其放入表格单元格的详细文本中进行显示。

问题是,当我尝试将值强制转换为NSStringa时,我崩溃了,我 认为这 是因为我试图将其强制Null转换为字符串。

什么是正确的方法?

我想做的是这样的:

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

这是字典的示例:

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";
}

如果我只需要将所有这些都包装成一个条件,那很好。我只是无法弄清楚那个条件是什么。回到Objective-C世界,我将与之作比较,[NSNull null]但是在Swift中似乎不起作用。


问题答案:

您可以使用as?运算符,该运算符将返回一个可选值(nil如果向下转换失败)

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

我在一个快速的应用程序中测试了这个示例

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

并且可以正确打印"Yay",而

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

"hello!"按预期打印。



 类似资料:
  • 问题内容: 我应该使用哪种构造来检查Twig模板中的值是否为NULL? 问题答案: 根据您的实际需求: 检查值是否为: {% endif %} 检查是否定义了变量: {% endif %} 另外,对两个值进行类型严格比较的测试可能对检查(如)以外的值很有用:

  • NSDictionary+ImageMetadata 和 NSDictionary-MetadataDatasource 是 ImageIO 框架提供的图像元数据处理的分类。 self.metadata = [NSDictionary   imageMetadataWithImageAtURL:imageURL]; self.tableView.dataSource = self.metadata;

  • 如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一。而且中级和高级程序员也在时时刻刻规避这个错误。其是迄今为止 Java 以及很多其他编程语言中最流行的一种错误。 Null 引用的发明者 Tony Hoare 在 2009 年道歉,并称这种错误为他的十亿美元错误。 我将其称之为自己的十亿美元错误。它的发明是在1965 年

  • 我有一个spring boot应用程序,它有一个endpoint测试配置类和一个单元测试来测试我的http客户端。我正在尝试从应用程序中获取服务器地址和端口。位于我的src/测试中的属性。(所有类都在我的src/测试中。) 这是我的配置类代码: 我对我的中的值进行了注释。属性,然后创建一个方法,我用bean实例化该方法以返回我的服务器地址字符串。 然后,我在HttpClientTest类中使用该字

  • 使用 === 操作符来检测 null 和布尔 false 值。 PHP 宽松的类型系统提供了许多不同的方法来检测一个变量的值。 然而这也造成了很多问题。 使用 == 来检测一个值是否为 null 或 false,如果该值实际上是一个空字符串或 0,也会误报为 false。 isset 是检测一个变量是否有值, 而不是检测该值是否为 null 或 false,因此在这里使用是不恰当的。 is_nul

  • 我是Java初学者,目前正在完成有关DSA的Udemy课程。我正在学习链表,并且正在研究在链表中插入和删除节点的方法。 从我所学到的到目前为止,我知道我们使用条件来检查链接列表是否是空的。 如果条件为true,则LinkedList为空,否则它不为空。 然而,我们不应该检查是否,因为尾巴将始终引用LinkedList中的最后一个节点,即使我们使? 这是我的密码: